2011-12-20 129 views
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”

+1

那么固定它,这两种情况的每一种产生的输出是什么,以及必须产生哪些输出?此外,您还没有提供完整的XML文档(请尽可能最小化)以及完整的XML转换,因此无法再现使用其中一个XML文档(未提供)转换(未提供)生成的声明(未提供),由于某些原因(未指定/解释),这是不需要的,但对于第二个XML文档,结果(未提供)由于某种原因(未指定/解释)为“良好”。请。提供所有缺失的数据 – 2011-12-20 04:29:29

+0

我已经提供了通过链接方式使用的示例文档和XSL。您可以在我的问题的第一段中点击“示例XML文件”和“这里”来查看参考XML文档和XSL。我现在已经更新了输出好坏的问题 – user837208 2011-12-20 05:10:59

回答

0

我已经更新了xsl查询原样

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