【问题标题】:Loop logic for creating a formatted particular xml format用于创建格式化的特定 xml 格式的循环逻辑
【发布时间】:2014-09-03 12:12:10
【问题描述】:

如何在 Java 中为以下逻辑构造 for 循环。我有一个项目列表,我需要为每个 KT2 项目加上 KT1 标签。请让我知道要应用的 for 循环逻辑是什么

这是我的格式 输入

<KT1>
  <KT2>
     String1
  </KT2>
  <KT2>
     String2
  </KT2>
  .
  .
  .

</KT1>

预期的输出

 <KT1>
   <KT2>
     String1
   </KT2>
 </KT1>

 <KT1>
   <KT2>
   String2
   </KT2>
  </KT1>

.
.
.

</KT1>

【问题讨论】:

  • 您是否需要使用特定的编程语言来执行此操作,如果需要怎么办?如果您可以访问它,XSLT 将是此类操作的理想选择
  • @GHC - 我正在尝试在 java 中实现

标签: java xml loops for-loop logic


【解决方案1】:

好的,首先,要在 Java 中使用 XSLT,请参阅此问题的答案: java xslt tutorial

您需要的 XSLT 如下(免责声明:我正在自己学习 XSLT,所以如果有人有更好的解决方案,请在此处发布并发表评论!)

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <!-- Template 1 (see below) -->
    <xsl:template match="/">
        <xsl:element name="Root">
            <xsl:apply-templates />
        </xsl:element>
    </xsl:template>
    <!-- Template 2 (see below) -->
    <xsl:template match="KT2">
        <xsl:element name="KT1">
            <xsl:copy>
                <xsl:apply-templates select="text()" />
            </xsl:copy>
        </xsl:element>
    </xsl:template>
    <!-- Template 3 (see below) -->
    <xsl:template match="text()">
        <xsl:copy />
    </xsl:template>
</xsl:stylesheet>

将此 XSLT 应用于您的输入 XML 的结果如下:

<?xml version="1.0" encoding="UTF-8"?>
<Root>
   <KT1>
       <KT2>String1</KT2>
   </KT1>
   <KT1>
       <KT2>String2</KT2>
   </KT1>
.
.
.
</Root>

我对 XSLT 工作方式的理解是它会按照特定的顺序应用模板。上面的 XLST 试运行如下:

1) XML 文档的根与模板 1 完全匹配 - 这告诉它输出一个根节点,然后继续处理其他元素 2)第一个KT1元素不匹配任何模板,所以不输出 3) 第一个 KT1 元素的第一个 KT2 子节点匹配到模板 2 - 这告诉它输出一个 KT1 节点,然后复制找到的 KT2 节点然后继续处理 4)KT2节点的文本匹配到模板3,它只是将它复制出来 5) 第一个 KT1 元素的第二个 KT2 子元素与模板 2 匹配 - 依此类推

上面的 XSLT 非常具体,可以很容易地使其更通用 - 谷歌“XSLT Identity Transforms”作为一个好的开始。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    • 2016-08-23
    相关资源
    最近更新 更多