我希望有人能够协助我将一个xml文件转换为另一个xml文件。我是新的XSLT;因此,在其他问题/答案中混淆,以达到我几乎能够完成转换的程度......只需要一些最后的帮助。
我有一个XML输入文档:
<copy>
<paragraph>
<name>Letter Text 1</name>
<lastModDate>DD:MM:YY</lastModDate>
</paragraph>
<paragraph>
<name>Letter Text 2</name>
<lastModDate>DD:MM:YY</lastModDate>
</paragraph>
<paragraph>
<name>Letter Text 3</name>
<lastModDate>DD:MM:YY</lastModDate>
</paragraph>
</copy>
我要做的是将每个段落标记的标签压缩为段落元素的属性。另一个xml文档中的所需输出为:
<Paragraph name="Letter Text 1" lastModDate="DD:MM:YY" />
<Paragraph name="Letter Text 2" lastModDate="DD:MM:YY" />
<Paragraph name="Letter Text 3" lastModDate="DD:MM:YY" />
我有我的XSL文件:
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<Paragraph>
<xsl:for-each select="copy/paragraph">
<xsl:attribute name="name">
<xsl:value-of select="name"/>
</xsl:attribute>
<xsl:attribute name="lastModDate">
<xsl:value-of select="lastModDate"/>
</xsl:attribute>
</xsl:for-each>
</Paragraph>
</xsl:template>
这给了我一个输出:
<Paragraph name="Letter Text 3" lastModDate="DD:MM:YY" />
只是最后一个子段节点;我尝试在for-each标签内移动标签,但抛出与空文档有关的错误。
有人可以协助我推荐最终作品吗?
答案 0 :(得分:0)
将<Paragraph>
代码放在 xsl:for-each
指令中。你现在拥有它的方式是创建一个Paragraph
元素,并且你会继续覆盖它的属性。
-
请注意,您的输出不是格式良好的XML,因为它没有单个根元素。
答案 1 :(得分:0)
这个XSLT 2.0样式表......
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl:output indent="yes" encoding="utf-8" omit-xml-declaration="yes" />
<xsl:strip-space elements="*" />
<xsl:template match="/">
<xsl:apply-templates select="copy/paragraph" />
</xsl:template>
<xsl:template match="paragraph">
<Paragraph name="{name}" lastModDate="{lastModDate}" />
</xsl:template>
</xsl:stylesheet>
...会将您的样本输入文档转换为此XDM结果树...
<Paragraph name="Letter Text 1" lastModDate="DD:MM:YY"/>
<Paragraph name="Letter Text 2" lastModDate="DD:MM:YY"/>
<Paragraph name="Letter Text 3" lastModDate="DD:MM:YY"/>
此结果树不是格式良好的XML文档。但是,它将是一个格式良好的外部通用解析实体,可能适合您的目的。如果没有,并且您需要输出为正确的XML文档,那么请使用像这样的根元素包装器...
<xsl:output indent="yes" encoding="utf-8" omit-xml-declaration="yes" />
<xsl:strip-space elements="*" />
<xsl:template match="/">
<t>
<xsl:apply-templates select="copy/paragraph" />
</t>
</xsl:template>
<xsl:template match="paragraph">
<Paragraph name="{name}" lastModDate="{lastModDate}" />
</xsl:template>
</xsl:stylesheet>
...会给你结果文件......
<t>
<Paragraph name="Letter Text 1" lastModDate="DD:MM:YY"/>
<Paragraph name="Letter Text 2" lastModDate="DD:MM:YY"/>
<Paragraph name="Letter Text 3" lastModDate="DD:MM:YY"/>
</t>
答案 2 :(得分:0)
这将完成这项工作。 它的优点是,您不需要知道属性的名称。 希望它有所帮助!
[2015-08-19 16:48:30] Application 'helloworld' with all environments build finished.
[2015-08-19 16:48:30] Deploying application 'helloworld' with all environments to MobileFirst Server...
[2015-08-19 16:48:34] Failed to deploy application 'helloworld' to MobileFirst Server: : HTTP 500 - Internal Server Error