我正在尝试使用这里使用的一些相同的逻辑https://stackoverflow.com/a/10629806/662877
到不同的 XML 但没有得到预期的输出。
如果 //TERR="KHM6" 则删除/剥离这两个元素创建付款项目 and 创建支付扩展从输入生成输出。
有人可以告诉我我在这里缺少什么吗?
Thanks
XSLT:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match=
"*[../TERR='KHM6']/CreatePaymentItems | *[../TERR='KHM6']/CreatePayExt"/>
</xsl:stylesheet>
输入 XML 示例:
<ns0:DocTran doctype="Return" xmlns:ns0="http://test.Schemas.Out_Return">
<TransactionType>
<PayLineItems>
<PayLineInsert>
<PAYTYPE>4</PAYTYPE>
<NUMBER>R2293416</NUMBER>
<SERIAL>3335889530</SERIAL>
<DOCDATE>05/03/2012</DOCDATE>
<ITEMNMBR>4NZ3330000010</ITEMNMBR>
<UNITPRCE>599.99</UNITPRCE>
<XTNDPRCE>599.99</XTNDPRCE>
<QUANTITY>1</QUANTITY>
<TAXAMNT>43.65</TAXAMNT>
<QTYONHND>1</QTYONHND>
<TERR>KHM6</TERR>
</PayLineInsert>
</PayLineItems>
<PayLineEXT>
<PAYTYPE>4</PAYTYPE>
<NUMBER>R2293416</NUMBER>
<LNITMSEQ>2293416</LNITMSEQ>
</PayLineEXT>
<CreatePaymentItems>
<CreatePaymentInsertRecord>
<INTERID>TOTM</INTERID>
<PAYTYPE>4</PAYTYPE>
<PAYNUMBER>R2293416</PAYNUMBER>
<DOCDATE>05/03/2012</DOCDATE>
<DOCAMOUNT>645.03</DOCAMOUNT>
<DOCNUMBER>2293416</DOCNUMBER>
</CreatePaymentInsertRecord>
</CreatePaymentItems>
<CreatePayExt>
<PAYTYPE>4</PAYTYPE>
<PAYNUMBER>R2293416</PAYNUMBER>
<SEQNUMBR>61261585</SEQNUMBR>
</CreatePayExt>
</TransactionType>
</ns0:DocTran>
预期输出 XML:
<ns0:DocTran doctype="Return" xmlns:ns0="http://test.Schemas.Out_Return">
<TransactionType>
<PayLineItems>
<PayLineInsert>
<PAYTYPE>4</PAYTYPE>
<NUMBER>R2293416</NUMBER>
<SERIAL>3335889530</SERIAL>
<DOCDATE>05/03/2012</DOCDATE>
<ITEMNMBR>4NZ3330000010</ITEMNMBR>
<UNITPRCE>599.99</UNITPRCE>
<XTNDPRCE>599.99</XTNDPRCE>
<QUANTITY>1</QUANTITY>
<TAXAMNT>43.65</TAXAMNT>
<QTYONHND>1</QTYONHND>
<TERR>KHM6</TERR>
</PayLineInsert>
</PayLineItems>
<PayLineEXT>
<PAYTYPE>4</PAYTYPE>
<NUMBER>R2293416</NUMBER>
<LNITMSEQ>2293416</LNITMSEQ>
</PayLineEXT>
</TransactionType>
</ns0:DocTran>
问题就在这里:
*[../TERR='KHM6']/CreatePaymentItems
这匹配CreatePaymentItems
具有同级元素的子元素TERR
有价值"KHM6"
.
但所有的兄弟姐妹TERR
所提供的 XML 文档中没有子项。
这就是你想要的转变:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match=
"*[PayLineItems/*/TERR = 'KHM6']
/*[self::CreatePaymentItems or self::CreatePayExt]"/>
</xsl:stylesheet>
当应用于提供的 XML 文档时(已更正为格式良好):
<ns0:DocTran doctype="Return" xmlns:ns0="http://test.Schemas.Out_Return">
<TransactionType>
<PayLineItems>
<PayLineInsert>
<PAYTYPE>4</PAYTYPE>
<NUMBER>R2293416</NUMBER>
<SERIAL>3335889530</SERIAL>
<DOCDATE>05/03/2012</DOCDATE>
<ITEMNMBR>4NZ3330000010</ITEMNMBR>
<UNITPRCE>599.99</UNITPRCE>
<XTNDPRCE>599.99</XTNDPRCE>
<QUANTITY>1</QUANTITY>
<TAXAMNT>43.65</TAXAMNT>
<QTYONHND>1</QTYONHND>
<TERR>KHM6</TERR>
</PayLineInsert>
</PayLineItems>
<PayLineEXT>
<PAYTYPE>4</PAYTYPE>
<NUMBER>R2293416</NUMBER>
<LNITMSEQ>2293416</LNITMSEQ>
</PayLineEXT>
<CreatePaymentItems>
<CreatePaymentInsertRecord>
<INTERID>TOTM</INTERID>
<PAYTYPE>4</PAYTYPE>
<PAYNUMBER>R2293416</PAYNUMBER>
<DOCDATE>05/03/2012</DOCDATE>
<DOCAMOUNT>645.03</DOCAMOUNT>
<DOCNUMBER>2293416</DOCNUMBER>
</CreatePaymentInsertRecord>
</CreatePaymentItems>
<CreatePayExt>
<PAYTYPE>4</PAYTYPE>
<PAYNUMBER>R2293416</PAYNUMBER>
<SEQNUMBR>61261585</SEQNUMBR>
</CreatePayExt>
</TransactionType>
</ns0:DocTran>
产生了想要的正确结果:
<ns0:DocTran xmlns:ns0="http://test.Schemas.Out_Return" doctype="Return">
<TransactionType>
<PayLineItems>
<PayLineInsert>
<PAYTYPE>4</PAYTYPE>
<NUMBER>R2293416</NUMBER>
<SERIAL>3335889530</SERIAL>
<DOCDATE>05/03/2012</DOCDATE>
<ITEMNMBR>4NZ3330000010</ITEMNMBR>
<UNITPRCE>599.99</UNITPRCE>
<XTNDPRCE>599.99</XTNDPRCE>
<QUANTITY>1</QUANTITY>
<TAXAMNT>43.65</TAXAMNT>
<QTYONHND>1</QTYONHND>
<TERR>KHM6</TERR>
</PayLineInsert>
</PayLineItems>
<PayLineEXT>
<PAYTYPE>4</PAYTYPE>
<NUMBER>R2293416</NUMBER>
<LNITMSEQ>2293416</LNITMSEQ>
</PayLineEXT>
</TransactionType>
</ns0:DocTran>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)