Как разделить файл XML с помощью XSLT? - PullRequest
0 голосов
/ 20 декабря 2011

Пожалуйста, обратитесь к образцу XML-файла , который я использую в своем проекте. Мне нужно разбить (разделить) этот файл в соответствии с «объектами» в XML-файле. К счастью, существует инструмент , который разбивает файл с помощью XSLT. Пожалуйста, обратитесь к XSL здесь

Когда объекты находятся в форме, как показано ниже -

<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>

разделение инструмента не выполняется должным образом - информация о кусте / ключе и т. Д. Отсутствует. Пример вывода См. 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>

работает просто отлично. См. это . Код, который используется для разделения файла по объектам:

<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 Ответ

0 голосов
/ 20 декабря 2011

Я исправил это, обновив запрос xsl как-

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