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