我有结构的xml文件:
<root>
<header>
<filename>file.txt</filename>
</header>
<orders>
<order>
<name>foo bar</name>
</order>
<order>
<name>foo bar</name>
</order>
...
</orders>
</root>
但是我想摆脱标签,所以结果xml应该是这样的:
<root>
<header>
<filename>file.txt</filename>
</header>
<orders>
<order>
<filename>file.txt</filename>
<name>foo bar</name>
</order>
<order>
<filename>file.txt</filename>
<name>foo bar</name>
</order>
...
</orders>
</root>
在单词中,我需要使用标记并将其放入每个元素中。 使用XSLT最简单的方法是什么?
答案 0 :(得分:1)
您需要使用身份转换模板
开始编码<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@*| node()"/>
</xsl:copy>
</xsl:template>
加上order
元素的模板
<xsl:template match="order">
<xsl:copy>
<xsl:apply-templates select="../../header/filename | node()"/>
</xsl:copy>
</xsl:template>
答案 1 :(得分:0)
首先,您需要创建xslt样式表来转换您的xml。工作示例如下所示:
<?xml version="1.0" encoding="utf-16"?>
<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:template match="/root">
<xsl:variable name="filename" select="header/filename"/>
<xsl:element name="root">
<xsl:for-each select="*">
<xsl:choose>
<xsl:when test="local-name()='orders'">
<xsl:element name="orders">
<xsl:for-each select="*">
<xsl:element name="order">
<xsl:element name="filename" >
<xsl:value-of select="$filename"/>
</xsl:element>
<xsl:copy-of select="*"/>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="."/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
你可以在这里找到如何转换xml documnent:how to apply an xslt stylesheet in c#