【问题标题】:How to split XML file using XSLT?如何使用 XSLT 拆分 XML 文件?
【发布时间】:2011-12-20 04:08:31
【问题描述】:

请参考我在项目中使用的sample XML file。我需要根据 XML 文件中的“对象”来打破(拆分)这个文件。幸运的是,有一个 tool 可用,它使用 XSLT 拆分文件。请参考XSLhere

当对象的形式如下 -

<registry_object id="oval:org.mitre.oval:obj:16243" version="1" xmlns="http://oval.mitre.org/XMLSchema/oval-definitions-5#windows">
  <hive>HKEY_LOCAL_MACHINE</hive>
  <key>SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\IPFS</key>
  <name>DisplayName</name>
</registry_object>

工具拆分未正确归档 - 缺少配置单元/密钥等信息。 Sample output参考this

当对象的形式如下 -

<registry_object id="oval:org.mitre.oval:obj:16179" version="2" comment="Uninstall\IPFS\DisplayName" xmlns="http://oval.mitre.org/XMLSchema/oval-definitions-5#windows">
  <set xmlns="http://oval.mitre.org/XMLSchema/oval-definitions-5">
    <object_reference>oval:org.mitre.oval:obj:16050</object_reference>
    <object_reference>oval:org.mitre.oval:obj:16243</object_reference>
  </set>
</registry_object>

它工作得很好。请参阅this。用于根据对象拆分文件的代码是 -

<xsl:when test="contains($inputId, ':obj:')">
<xsl:for-each select="$definitionDoc//oval-def:objects/child::*[@id = $inputId]/descendant::*/*:object_reference/text() | $definitionDoc//oval-def:objects/child::*[@id = $inputId]/descendant::*/*:filter/text() | 
                $definitionDoc//oval-def:objects/child::*[@id = $inputId]/descendant::*/*:var_ref/text() | 
                $definitionDoc//oval-def:objects/child::*[@id = $inputId]/descendant::*/@var_ref">              

                <xsl:variable name="returnedIds" select="ovalfn:getAllIds(($processedIds | $inputId), .)"/>
                xsl:sequence select="$returnedIds | $processedIds | $inputId | ."/>
            </xsl:for-each>

由于我不了解 XSLT,我不知道如何解决这个问题。有人可以就如何解决这个问题提供一些指导吗?我想我需要更新上面的 XSL 代码,以便它可以在没有“object_reference”时提取“对象”

【问题讨论】:

  • 那么,在这两种情况下分别产生什么输出,而必须产生什么输出呢?此外,您还没有提供完整的 XML 文档(请尽可能少)和完整的 XML 转换,因此无法重现使用其中一个 XML 文档(未提供)转换(未提供)产生的声明不需要的输出(未提供),由于某种原因(未指定/解释),这是不需要的,但是对于第二个 XML 文档,由于某种原因(未指定/解释),结果(未提供)是“好”的。请。提供所有缺失的数据
  • 我提供了示例文档和通过链接使用的XSL。您可以单击我的问题第一段中的“示例 XML 文件”和“此处”以查看参考 XML 文档和 XSL。我现在已经用好的和坏的输出更新了这个问题

标签: xml xslt xpath xml-parsing


【解决方案1】:

我已通过将 xsl 查询更新为修复它-

$definitionDoc//oval-def:objects/child::*[@id = $inputId]/descendant::*/.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    • 1970-01-01
    • 2017-08-29
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多