我以相当奇怪的格式获得了一个XML文档,我需要将其加载到DataSet中,但不出所料我在尝试这样做时遇到错误。我可以看到我如何将文档转换成可以工作的东西,但是我有点像XSLT一样绕圈子...
该文件看起来像这样:
<map> <entry key = "status">ok</entry> <entry key = "pageNum">1</entry> <entry key = "title">DocTitle</entry> <entry key = "stuff"> <map> <entry key = "id">171</entry> <entry key = "name">StackOverflow</entry> <entry key = "timeZone">America/New_York</entry> </map> <map> <entry key = "id">172</entry> <entry key = "name">StackOverflow2</entry> <entry key = "timeZone">America/New_York</entry> </map> </entry> </map>
我想把它变成更像这样的东西:
<map> <status>ok</status> <pageNum>1</pageNum> <title>DocTitle</title> <stuff> <map> <id>171</id> <name>StackOverflow</name> <timeZone>America/New_York</timeZone> </map> <map> <id>172</id> <name>StackOverflow2</name> <timeZone>America/New_York</timeZone> </map> </stuff> </map>
我已经有了所有代码来运行它通过XSLT转换并处理输出,但是我无法让转换本身产生任何合理的东西。我真的不认为这和我做的一样困难,如果一些聪明的灵魂可以把一些有用的东西扔在一起,我会永远感激。
或者只是指出一个我可以修改的例子或其他东西......
感谢。
答案 0 :(得分:1)
此转化:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="entry[@key]">
<xsl:element name="{@key}">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
应用于提供的XML文档:
<map>
<entry key = "status">ok</entry>
<entry key = "pageNum">1</entry>
<entry key = "title">DocTitle</entry>
<entry key = "stuff">
<map>
<entry key = "id">171</entry>
<entry key = "name">StackOverflow</entry>
<entry key = "timeZone">America/New_York</entry>
</map>
<map>
<entry key = "id">172</entry>
<entry key = "name">StackOverflow2</entry>
<entry key = "timeZone">America/New_York</entry>
</map>
</entry>
</map>
生成想要的正确结果:
<map>
<status>ok</status>
<pageNum>1</pageNum>
<title>DocTitle</title>
<stuff>
<map>
<id>171</id>
<name>StackOverflow</name>
<timeZone>America/New_York</timeZone>
</map>
<map>
<id>172</id>
<name>StackOverflow2</name>
<timeZone>America/New_York</timeZone>
</map>
</stuff>
</map>
答案 1 :(得分:0)
<xsl:stylesheet
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"
exclude-result-prefixes="xs">
<xsl:template match="*">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="//entry">
<xsl:variable name="key" select="@key"/>
<xsl:element name="{$key}">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>