【问题标题】:XSLT transformation from any XML to a list of name-value xml elements从任何 XML 到名称-值 xml 元素列表的 XSLT 转换
【发布时间】:2014-05-03 05:23:07
【问题描述】:

我正在尝试将 XML 文档(实际上,我需要转换任何 xml)转换为元素列表,这些元素将值存储为元素值,并将原始节点的名称存储为名为“名称”的属性,例如:

<rootNode>
    <element name="first">value1</element>
    <element name="try">valueX</element>
<rootNode>

原作:

<a>
    <first>value1</first>
    <try>valueX</try>
</a>

【问题讨论】:

  • 1) 天哪,为什么?说真的,这听起来是一个非常糟糕的主意。 2)做起来不难,你自己一定试过了。你有吗?
  • 我有,但无法正常工作。至于第一部分,为什么,这是一个很好的问题,我试图说服开发团队的其他成员使用他们来的 XML,但他们想在表格中显示它,在这种特殊格式的小 jspx 内,因为我不是建筑师,所以我只需要这样做......
  • 如果你想直观地表示 XML,先把它改成 other XML,然后再把 that XML 改成 HTML 听起来就像是在踢自己的脚.特别是因为您没有更改文档的结构,而只是更改了元素的名称。这是非常多余的。顺便说一句,您的示例没有定义如何处理嵌套。据我所知,输出将以&lt;element name="a"&gt; 开头,而不是&lt;rootNode&gt;
  • "我需要将任何 xml) 转换为元素列表" 这并不难做到。但是,您确实需要解决 Tomalak 提出的嵌套问题。将嵌套文档转换为元素名称-值对列表永久删除信息。您将无法重建原始文档。

标签: xml xslt


【解决方案1】:

我同意这是一个非常糟糕的主意。这与大多数人想要的 100% 背道而驰……把好的 XML 变成坏的形式。再说一次,如果您没有尝试复制任何层次结构,这很简单。你想要这样的结构:

    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        version="1.0">
        <xsl:output indent="yes"/>
        <xsl:template match="a">
            <rootNode>
                <xsl:apply-templates/>
            </rootNode>
        </xsl:template>
        <xsl:template match="*">
            <xsl:variable name="name" select="name()"/>
            <element>
                <xsl:attribute name="name">
                    <xsl:value-of select="$name"/>
                </xsl:attribute>
                <xsl:value-of select="."/>
            </element>
        </xsl:template>
        <xsl:template match="text()"/>
    </xsl:stylesheet>

这会产生:

<rootNode>
   <element name="first">value1</element>
   <element name="try">valueX</element>
</rootNode>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-02
    • 2021-11-24
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    相关资源
    最近更新 更多