Xml XSLT将父元素添加到子元素
我试图将某个XML中的一个元素添加到同一XML中的某些子元素中。所讨论的元素已经重复,因此值必须来自XML的正确部分。以下是源XML:Xml XSLT将父元素添加到子元素,xml,xslt,Xml,Xslt,我试图将某个XML中的一个元素添加到同一XML中的某些子元素中。所讨论的元素已经重复,因此值必须来自XML的正确部分。以下是源XML: <Extract> <Packet> <TXREQUESTID>694154</TXREQUESTID> <Data> <Property> <Key>phoneNumber</Key> </Prope
<Extract>
<Packet>
<TXREQUESTID>694154</TXREQUESTID>
<Data>
<Property>
<Key>phoneNumber</Key>
</Property>
<Property>
<Key>ownerName</Key>
</Property>
</Data>
<Milestones>
<Milestone>
<Code>123123</Code>
</Milestone>
<Milestone>
<Code>123125</Code>
</Milestone>
</Milestones>
</Packet>
<Packet>
<TXREQUESTID>694155</TXREQUESTID>
<Data>
<Property>
<Key>phoneNumber</Key>
</Property>
<Property>
<Key>ownerName</Key>
</Property>
</Data>
<Milestones>
<Milestone>
<Code>789789</Code>
</Milestone>
<Milestone>
<Code>123126</Code>
</Milestone>
</Milestones>
</Packet>
</Extract>
我需要将TXREQUESTID元素复制为子属性和里程碑元素中的一个元素。完成后,需要如下所示:
<Extract>
<Packet>
<TXREQUESTID>694154</TXREQUESTID>
<Data>
<Property>
<Key>phoneNumber</Key>
<TXREQUESTID>694154</TXREQUESTID>
</Property>
<Property>
<Key>ownerName</Key>
<TXREQUESTID>694154</TXREQUESTID>
</Property>
</Data>
<Milestones>
<Milestone>
<Code>123123</Code>
<TXREQUESTID>694154</TXREQUESTID>
</Milestone>
<Milestone>
<Code>123125</Code>
<TXREQUESTID>694154</TXREQUESTID>
</Milestone>
</Milestones>
</Packet>
<Packet>
<TXREQUESTID>694155</TXREQUESTID>
<Data>
<Property>
<Key>phoneNumber</Key>
<TXREQUESTID>694155</TXREQUESTID>
</Property>
<Property>
<Key>ownerName</Key>
<TXREQUESTID>694155</TXREQUESTID>
</Property>
</Data>
<Milestones>
<Milestone>
<Code>789789</Code>
<TXREQUESTID>694155</TXREQUESTID>
</Milestone>
<Milestone>
<Code>123126</Code>
<TXREQUESTID>694155</TXREQUESTID>
</Milestone>
</Milestones>
</Packet>
</Extract>
我已经花了好几个小时在这上面了,没有任何运气。这看起来应该很简单,但我发现XSLT语法令人困惑。有人能给我指出正确的方向吗?从开始,并覆盖要更改的元素(属性和里程碑
)
XML输入
<Extract>
<Packet>
<TXREQUESTID>694154</TXREQUESTID>
<Data>
<Property>
<Key>phoneNumber</Key>
</Property>
<Property>
<Key>ownerName</Key>
</Property>
</Data>
<Milestones>
<Milestone>
<Code>123123</Code>
</Milestone>
<Milestone>
<Code>123125</Code>
</Milestone>
</Milestones>
</Packet>
<Packet>
<TXREQUESTID>694155</TXREQUESTID>
<Data>
<Property>
<Key>phoneNumber</Key>
</Property>
<Property>
<Key>ownerName</Key>
</Property>
</Data>
<Milestones>
<Milestone>
<Code>789789</Code>
</Milestone>
<Milestone>
<Code>123126</Code>
</Milestone>
</Milestones>
</Packet>
</Extract>
<Extract>
<Packet>
<TXREQUESTID>694154</TXREQUESTID>
<Data>
<Property>
<TXREQUESTID>694154</TXREQUESTID>
<Key>phoneNumber</Key>
</Property>
<Property>
<TXREQUESTID>694154</TXREQUESTID>
<Key>ownerName</Key>
</Property>
</Data>
<Milestones>
<Milestone>
<TXREQUESTID>694154</TXREQUESTID>
<Code>123123</Code>
</Milestone>
<Milestone>
<TXREQUESTID>694154</TXREQUESTID>
<Code>123125</Code>
</Milestone>
</Milestones>
</Packet>
<Packet>
<TXREQUESTID>694155</TXREQUESTID>
<Data>
<Property>
<TXREQUESTID>694155</TXREQUESTID>
<Key>phoneNumber</Key>
</Property>
<Property>
<TXREQUESTID>694155</TXREQUESTID>
<Key>ownerName</Key>
</Property>
</Data>
<Milestones>
<Milestone>
<TXREQUESTID>694155</TXREQUESTID>
<Code>789789</Code>
</Milestone>
<Milestone>
<TXREQUESTID>694155</TXREQUESTID>
<Code>123126</Code>
</Milestone>
</Milestones>
</Packet>
</Extract>
XSLT1.0
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Milestone|Property">
<xsl:copy>
<xsl:apply-templates select="@*|node()|ancestor::Packet/TXREQUESTID"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
如果元素顺序很重要,请按如下方式拆分xsl:apply模板
:
<xsl:apply-templates select="@*|node()"/>
<xsl:apply-templates select="ancestor::Packet/TXREQUESTID"/>
几乎任何形式的XSLT问题“我想保持大部分XML不变,但调整X、Y和Z”都可以通过身份转换和一些小心的重写来解决。