使用引用将节点的值复制到其他节点
Copy value of node using reference into other node
我正在尝试将标识符引用的 XML 节点的值复制到图中的另一个节点。
原始文件如下所示:
<Root>
<Object id="Id1">
<FileName>file.png</FileName>
</Object>
<Description>
<Content>
<Title>Nice Object</Title>
<ObjectReference>Id1</ObjectReference>
</Content>
</Description></Root>
在XSLT中,我使用一个变量来标识引用节点标识符的值。
<xsl:template match="Content">
<xsl:variable name="IdObject">
<xsl:value-of select="ObjectReference"/>
</xsl:variable>
<Out>
<Title>
<xsl:value-of select="Title"/>
</Title>
<FileName>
<xsl:value-of select="//Object[@id='$IdObject']/Filename"/>
</FileName>
</Out></xsl:template>
'FileName' 的值未被复制。我 select 错误的引用节点,我想。我尝试使用 'Ancestor::' 和 'Parent::'。那也不管用。
你有好主意吗?
谢谢
我想获得以下结果:
<Out>
<Name>Nice Object</Name>
<FileName>file.png</FileName>
</Out>
XSLT 有一个内置的 key 机制来解析交叉引用。以下样式表:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:key name="obj" match="Object" use="@id" />
<xsl:template match="Content">
<Out>
<xsl:copy-of select="Title"/>
<xsl:copy-of select="key('obj', ObjectReference)/FileName"/>
</Out>
</xsl:template>
<xsl:template match="text()"/>
</xsl:stylesheet>
应用于您的输入示例,将 return:
结果
<?xml version="1.0" encoding="UTF-8"?>
<Out>
<Title>Nice Object</Title>
<FileName>file.png</FileName>
</Out>
P.S。您的尝试没有成功,因为:
- 您引用了变量的引用;
- 您使用了
Filename
而不是 FileName
。
我正在尝试将标识符引用的 XML 节点的值复制到图中的另一个节点。 原始文件如下所示:
<Root>
<Object id="Id1">
<FileName>file.png</FileName>
</Object>
<Description>
<Content>
<Title>Nice Object</Title>
<ObjectReference>Id1</ObjectReference>
</Content>
</Description></Root>
在XSLT中,我使用一个变量来标识引用节点标识符的值。
<xsl:template match="Content">
<xsl:variable name="IdObject">
<xsl:value-of select="ObjectReference"/>
</xsl:variable>
<Out>
<Title>
<xsl:value-of select="Title"/>
</Title>
<FileName>
<xsl:value-of select="//Object[@id='$IdObject']/Filename"/>
</FileName>
</Out></xsl:template>
'FileName' 的值未被复制。我 select 错误的引用节点,我想。我尝试使用 'Ancestor::' 和 'Parent::'。那也不管用。 你有好主意吗? 谢谢 我想获得以下结果:
<Out>
<Name>Nice Object</Name>
<FileName>file.png</FileName>
</Out>
XSLT 有一个内置的 key 机制来解析交叉引用。以下样式表:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:key name="obj" match="Object" use="@id" />
<xsl:template match="Content">
<Out>
<xsl:copy-of select="Title"/>
<xsl:copy-of select="key('obj', ObjectReference)/FileName"/>
</Out>
</xsl:template>
<xsl:template match="text()"/>
</xsl:stylesheet>
应用于您的输入示例,将 return:
结果
<?xml version="1.0" encoding="UTF-8"?>
<Out>
<Title>Nice Object</Title>
<FileName>file.png</FileName>
</Out>
P.S。您的尝试没有成功,因为:
- 您引用了变量的引用;
- 您使用了
Filename
而不是FileName
。