2011-12-20 93 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::*/.