这实际上是我的内联xslt:
<xsl:element name="ns0:LineItems" >
<xsl:element name="ns0:Response" >
<xsl:for-each select="//*[local-name()='Response']//*[local-name()='ITEMS']" >
<xsl:element name="ns0:ITEMS" >
<xsl:attribute name ="LINEITEMID" >
<xsl:value-of select="*[local-name()='LINEITEMID']" />
</xsl:attribute>
<xsl:attribute name ="ITM_NUMBER" >
<xsl:value-of select="*[local-name()='ITM_NUMBER']" />
</xsl:attribute>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:element>
我的问题是,如何从结果xml ns0:elmentname
创建具有相同名称空间的新节点。当此命名空间更改为ns1:elmentname
时,我遇到了问题。
结果应如下所示:
<?xml version="1.0" encoding="utf-8"?>
<ns0:LineItems xmlns:ns0="http://schemas.microsoft.com/BizTalk/2003">
<ns0:Response>
<ns0:ITEMS LINEITEMID="777" ITM_NUMBER="001000" />
<ns0:ITEMS LINEITEMID="2" ITM_NUMBER="001055" />
<ns0:ITEMS LINEITEMID="3" ITM_NUMBER="001020" />
</ns0:Response>
</ns0:LineItems>
我的输入:
<?xml version="1.0" encoding="utf-8"?>
<Response>
<HEADER>
<ORDER_ID>1234</ORDER_ID>
</HEADER>
<E_SALESDOCUMENT>test123</E_SALESDOCUMENT>
<E_STATUS>AllesToll</E_STATUS>
<ITEMS>
<LINEITEMID>777</LINEITEMID>
<ITM_NUMBER>001000</ITM_NUMBER>
<MATERIAL>000000000000219701</MATERIAL>
</ET_ORDER_ITEMS>
<ET_ORDER_ITEMS>
<LINEITEMID>2</LINEITEMID>
<ITM_NUMBER>001055</ITM_NUMBER>
<MATERIAL>000000000000219702</MATERIAL>
</ET_ORDER_ITEMS>
<ET_ORDER_ITEMS>
<LINEITEMID>3</LINEITEMID>
<ITM_NUMBER>001020</ITM_NUMBER>
<MATERIAL>000000000000219703</MATERIAL>
</ITEMS>
</Response>
答案 0 :(得分:0)
您可以使用<xsl:element>
的namespace
并使用XPath namespace-uri(node-set)
函数确定当前命名空间。
例:
假设我们有这样的XML:
<?xml version="1.0" encoding="utf-8"?>
<root xmlns:a="a" xmlns:b="b">
<a:item>
<a:name>a</a:name>
</a:item>
<b:item>
<b:name>b</b:name>
</b:item>
</root>
所以,我们可以使用这个XSLT:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:a="a" xmlns:b="b"
>
<xsl:output method="xml" indent="yes"/>
<xsl:template match="root">
<root>
<xsl:apply-templates select="a:item | b:item"/>
</root>
</xsl:template>
<xsl:template match="a:item | b:item">
<xsl:element namespace="{namespace-uri(.)}" name="element">
<xsl:value-of select="a:name | b:name"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
输出:
<?xml version="1.0" encoding="utf-8"?>
<root xmlns:a="a" xmlns:b="b">
<element xmlns="a">a</element>
<element xmlns="b">b</element>
</root>
因此,我们动态地使用名称空间构造XML。