【问题标题】:XSL Transformation with dynamic XML Tags使用动态 XML 标记进行 XSL 转换
【发布时间】:2020-10-19 14:21:32
【问题描述】:

我有一个类似下面的 XML:

<Element>
    <ele.Name> Name_Value </ele.Name>
    <ele.Age> Age_Value </ele.Age>
    <ele.Something> Something_Value </ele.Something>
<Element>

标签本身是,除了“ele”部分是完全动态的并且可以有任意数量的标签。这意味着可以有 100 个不同的标签,其中没有一个是事先知道的。只有标签内的“ele”部分。

现在我需要将上面的 XML 转换成这样的:

Name;Age;Something
Name_Value;Age_Value;Something_Value

两行,第一行是标签名,第二行是值。名称中必须去掉“ele”。我目前的问题是我真的不知道如何在事先不知道它们的情况下访问这些标签。也许有人可以给我一个提示以找到解决此问题的方法?

性能在这里非常重要,因为这可能在单个进程中执行 10000 多次。

【问题讨论】:

  • “可能有 100 个不同的标签……这可能会在一个进程中执行 10000 多次。” 那么您的 XML 与您发布的内容不一样。
  • 好吧,我不想以 1:1 的比例阐述我的问题。只有我现在卡住的部分。我必须处理的文件是数 GB 大,深度为 10+。当我解决这个问题时,我认为我应该能够完成我的任务

标签: xml xslt


【解决方案1】:

你可以处理

<xsl:template match="Element">
  <xsl:value-of select="*/substring-after(local-name(), '.')" separator=";"/>
  <xsl:text>&#10;</xsl:text>
  <xsl:value-of select="*" separator=";"/>
</xsl:template>

假设 XSLT 2 或更高版本。当然,在 XSLT 1.0 中处理 * 也是可能的,也可以处理所有子元素。

【讨论】:

  • 这很有帮助。我不得不对其进行相当多的调整以适应我的确切问题,但原则有所帮助。非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-15
  • 2013-02-05
  • 1970-01-01
  • 1970-01-01
  • 2014-06-09
  • 1970-01-01
相关资源
最近更新 更多