【问题标题】:Processing xml file to remove elements处理 xml 文件以删除元素
【发布时间】:2017-12-19 20:24:13
【问题描述】:

我刚刚完成了一些处理 XML 文件的任务。我已经开始阅读一些基础知识,但我想我会问这里的优秀和优秀的人,一旦我加快速度,一些 XSLT 处理是否会做我需要的事情。

我有一个 XML 文件,其结构大致如下(在它的主体中):

<p><no>12345</no>
<line>Lots of text here that I want to get rid of but need to keep the text in any <ref>tags like this</ref></line></p>

在一天结束时,文件被导入 Excel,但就目前而言,它很大,处理它以删除任何没有 &lt;ref&gt;&lt;line&gt; 标记是一项漫长的工作,即使这样,文件仍然非常臃肿.如果可能的话,我想减少多余的文字。我认为我应该能够删除任何没有&lt;ref&gt; 标记的&lt;line&gt; 以及类似地任何没有&lt;ref&gt; 标记的&lt;p&gt;,但是是否可以删除实际文本?

【问题讨论】:

  • 有可能吗?是的。人们通常会编写一个转换,它对您想要省略的节点不做任何事情,或者明确地将它们转换为空。但我们不是编码服务。如果您无法自己弄清楚细节,请向我们展示您的想法,并就导致您遇到麻烦的原因提出具体问题。
  • 您的问题不清楚。如果 &lt;line&gt; 元素包含任何嵌套的 &lt;ref&gt; 元素,您是否要 (a) 保留它们;或 (b) 删除所有 &lt;line&gt; 元素和嵌套文本,但保留嵌套在 &lt;line&gt; 元素内的所有 &lt;ref&gt; 元素。查找“XSL 身份转换”以开始使用。

标签: xml xslt


【解决方案1】:

你可以试试这个:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">

    <xsl:strip-space elements="*"/>

    <!-- Delete all p or line element with no descendant ref -->
    <xsl:template match="p[not(descendant::ref)]|line[not(descendant::ref)]"/>

    <!-- Identical Transformation -->
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet>

【讨论】:

    【解决方案2】:

    谢谢各位。我会查看这个和链接,看看我可以排序。很高兴知道它可以工作,但在我继续努力之前。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-26
      • 1970-01-01
      相关资源
      最近更新 更多