转:http://www.cnblogs.com/dujun0618/articles/747095.html
//根据部件编号,从材料组成中把构成信息读出来
function readRanLiao(pid,xpath)
{
var curNodeParent = XDocument.DOM.selectSingleNode(xpath).parentNode;
var curNodes = XDocument.DOM.selectNodes(xpath);
var curPcount = XDocument.DOM.selectSingleNode("/my:温州圣火/my:保存本次生产数量").text;
curNodes.removeAll();
var pidNodes = XDocument.GetDOM("材料组成-单张表").selectNodes("/dfs:myFields/dfs:dataFields/tns:GetDataResponse/tns:GetDataResult/my:温州圣火/my:模板结构[my:编号 = '" + pid + "']/my:组/my:构成组");
var pidNodesLength,xmlStr = "",xslStr = "";
pidNodesLength = pidNodes.length;
//XDocument.UI.Alert(pidNodesLength);
if (pidNodesLength > 0)
{
while(pidNodesLength > 0)
{
var sonpidNode = pidNodes.nextNode();
xmlStr += sonpidNode.xml;
pidNodesLength--;
}
//数据源
xmlStr = '<?xml version="1.0" encoding="gb2312"?><根>' + xmlStr + "</根>";
//XDocument.UI.Alert(xmlStr);
//转换样式
xslStr += '<?xml version="1.0" encoding="gb2312"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2006-05-23T07:44:28" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:fn="usercode"> ';
xslStr += '<msxsl:script language="javascript" implements-prefix="fn">';
xslStr += 'function getallcount(count,pcount){return parseFloat(count)*pcount;}</msxsl:script>';
xslStr += '<xsl:template match="/"><my:结果><xsl:for-each select="根/my:构成组"><my:原料信息组>';
xslStr += '<my:原料序号><xsl:value-of select="position()"/></my:原料序号>';
xslStr += '<my:所属部件><xsl:value-of select="my:所属部件1"/></my:所属部件>';
xslStr += '<my:原料名称><xsl:value-of select="my:名称1"/></my:原料名称>';
xslStr += '<my:原料规格><xsl:value-of select="my:规格1"/></my:原料规格>';
xslStr += '<my:原料备注><xsl:value-of select="my:备注1"/></my:原料备注>';
xslStr += '<my:原料编号><xsl:value-of select="my:编号1"/></my:原料编号>';
xslStr += '<my:原料单位><xsl:value-of select="my:单位1"/></my:原料单位>';
xslStr += '<my:原料数量><xsl:value-of select="fn:getallcount(sum(my:数量1),' + curPcount + ')"/></my:原料数量>';
xslStr += '<my:生产与外购>1</my:生产与外购>';
xslStr += '<my:计算公式></my:计算公式>';
xslStr += '</my:原料信息组></xsl:for-each></my:结果></xsl:template>';
xslStr += '</xsl:stylesheet>';
//XDocument.UI.Alert(xslStr);
var xmlDOM,xslDOM,transDOM;
xmlDOM = XDocument.CreateDOM();
xmlDOM.loadXML(xmlStr);
//XDocument.UI.Alert(xmlDOM.xml);
xslDOM = XDocument.CreateDOM();
xslDOM.loadXML(xslStr);
//XDocument.UI.Alert(xslDOM.xml);
transDOM = XDocument.CreateDOM();
transDOM.loadXML(xmlDOM.transformNode(xslDOM));
transDOM.setProperty("SelectionNamespaces", 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2006-05-23T07:44:28" xmlns:xd="http://schemas.microsoft.com/office/infopath/2003"');
//XDocument.UI.Alert(transDOM.documentElement.xml);
var childs = transDOM.documentElement.selectNodes("/my:结果/my:原料信息组");
var childsLength = childs.length;
while(childsLength > 0)
{
var sonChild = childs.nextNode();
curNodeParent.appendChild(sonChild);
childsLength--;
}
}
}