0
请参阅sample XML file我正在使用我的项目。我需要根据XML文件中的“对象”来分割(拆分)这个文件。幸运的是,有一个tool可用,它使用XSLT分割文件。请参考XSL here如何使用XSLT拆分XML文件?
当对象的形式类似如下─
<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>
工具分裂不提交properly-蜂巢/密钥等信息丢失。 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文档,结果(未提供)由于某种原因(未指定/解释)为“良好”。请。提供所有缺失的数据 – 2011-12-20 04:29:29
我已经提供了通过链接方式使用的示例文档和XSL。您可以在我的问题的第一段中点击“示例XML文件”和“这里”来查看参考XML文档和XSL。我现在已经更新了输出好坏的问题 – user837208 2011-12-20 05:10:59