如何使用另一个 XML 文件中的属性值作为当前 XML 中的元素值选择
我有两个 XML 文件。一个是主 XML 文件,另一个用作查找表。这是主要的 XML:
<Report>
<row>
<field1>test1</field1>
<field2>test2</field2>
<field3>test3</field3>
</row>
<row>
<field1>test4</field1>
<field2>test5</field2>
<field3>test6</field3>
</row>
</Report>
查找 xml 文件如下所示:
<lookup>
<fieldmapping name="field1">fieldA</fieldmapping>
<fieldmapping name="field2">fieldB</fieldmapping>
<fieldmapping name="field3">fieldC</fieldmapping>
</lookup>
这是我想要的输出 xml:
<Items>
<Item>
<FieldName name="fieldA">test1</FieldName>
<FieldName name="fieldB">test2</FieldName>
<FieldName name="fieldC">test3</FieldName>
</Item>
<Item>
<FieldName name="fieldA">test4</FieldName>
<FieldName name="fieldB">test5</FieldName>
<FieldName name="fieldC">test6</FieldName>
</Item>
</Items>
我正在使用以下 XSLT,但无法弄清楚如何从 field1、field2 和 field3 中选择值:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="mappingLookupDoc" select="document('lookup.xml')/lookup/fieldmapping "/>
<xsl:key name="mappingKey" match="fieldmapping " use="@name"/>
<xsl:template match="report">
<xsl:apply-templates select="$mappingLookupDoc"/>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="/">
<Items xmlns="http://www.w3.org/1999/xhtml" schemaVersion="1.0">
<xsl:for-each select="report/row">
<Item>
<xsl:for-each select="$mappingLookupDoc">
<xsl:variable name="fieldname" select="@name"/>
<FieldName>
<xsl:attribute name="name">
<xsl:value-of select="." />
</xsl:attribute>
<xsl:value-of select="/report/row/?????"/>
</FieldName>
</xsl:for-each>
</Item>
</xsl:for-each>
</Items>
</xsl:template>
I have two XML files. One is the main XML file and the other one is used as a lookup table. Here is the main XML:
<Report>
<row>
<field1>test1</field1>
<field2>test2</field2>
<field3>test3</field3>
</row>
<row>
<field1>test4</field1>
<field2>test5</field2>
<field3>test6</field3>
</row>
</Report>
The lookup xml file looks like this:
<lookup>
<fieldmapping name="field1">fieldA</fieldmapping>
<fieldmapping name="field2">fieldB</fieldmapping>
<fieldmapping name="field3">fieldC</fieldmapping>
</lookup>
Here is the output xml I want:
<Items>
<Item>
<FieldName name="fieldA">test1</FieldName>
<FieldName name="fieldB">test2</FieldName>
<FieldName name="fieldC">test3</FieldName>
</Item>
<Item>
<FieldName name="fieldA">test4</FieldName>
<FieldName name="fieldB">test5</FieldName>
<FieldName name="fieldC">test6</FieldName>
</Item>
</Items>
I am using the following XSLT and can not figure out how to select the value from field1, field2, and field3:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="mappingLookupDoc" select="document('lookup.xml')/lookup/fieldmapping "/>
<xsl:key name="mappingKey" match="fieldmapping " use="@name"/>
<xsl:template match="report">
<xsl:apply-templates select="$mappingLookupDoc"/>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="/">
<Items xmlns="http://www.w3.org/1999/xhtml" schemaVersion="1.0">
<xsl:for-each select="report/row">
<Item>
<xsl:for-each select="$mappingLookupDoc">
<xsl:variable name="fieldname" select="@name"/>
<FieldName>
<xsl:attribute name="name">
<xsl:value-of select="." />
</xsl:attribute>
<xsl:value-of select="/report/row/?????"/>
</FieldName>
</xsl:for-each>
</Item>
</xsl:for-each>
</Items>
</xsl:template>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我会这样做(假设 XSLT 2.0):
[编辑]
以下是上述 XSLT 2.0 样式表的 XSLT 1.0 重写:
I would do it like this (assuming XSLT 2.0):
[edit]
Here is an XSLT 1.0 rewrite of the above XSLT 2.0 stylesheet:
这就是我的做法(尽管我喜欢 Martin 使用
xsl:key
):我修改了 main.xml 和 Lookup.xml 以显示动态名称查找。
main.xml
lookup.xml
XSLT 1.0 样式表
输出
This is the way I would do it (although I like Martin's use of
xsl:key
):I modified main.xml and lookup.xml to show the dynamic name lookup.
main.xml
lookup.xml
XSLT 1.0 stylesheet
output
也许这样的事情会更简单:
Maybe something like this would be simpler: