XSLT - получить конкретное значение из внешнего XML-документа - PullRequest
0 голосов
/ 02 октября 2018

Я хочу получить конкретное значение, если условие выполнено.Чтобы получить это, нужно найти конкретное значение в исходном XML-документе и сравнить его с внешним.

<xsl:variable name="objNo">
    <!-- If True, look up in document and get 'obj' -->
    <xsl:when test="cac:AdditionalDocumentReference[cbc:DocumentType = 'AKV']">
        <xsl:variable name='QueryResult' select='document("tmp9501.xml")/QueryResult/Result'/>
        <xsl:value-of select='$QueryResult[ac_name = cac:AdditionalDocumentReference/cbc:ID]/obj'/>
    </xsl:when>
</xsl:variable>

Это часть документа tmp9501.xml, где я буду искатьдля значений

<?xml version="1.0" encoding="utf-8"?>
<QueryResult>
    <Result>
        <ac_name>12345678</ac_name>
        <obj>AA12345</obj>
    </Result>
    <Result>
        <ac_name>87654321</ac_name>
        <obj>BB67890</obj>
    </Result>
</QueryResult>

Когда я пытаюсь запустить этот код, $ regNo ничего не возвращает.

Давайте предположим, что cac:AdditionalDocumentReference/cbc:ID = 12345678, который должен вернуть obj = AA12345 Как я могу в этом случае вернуть правильныйзначение

1 Ответ

0 голосов
/ 02 октября 2018

Проблема с этим выражением ....

$QueryResult[ac_name = cac:AdditionalDocumentReference/cbc:ID]

Это ищет ac_name под QueryResult/Result узлами, а также cac:AdditionalDocumentReference под тем же QueryResult/Result, когда вы действительно хотите проверить cac:AdditionalDocumentReference под текущим узлом.

<xsl:value-of select='$QueryResult[ac_name = current()/cac:AdditionalDocumentReference/cbc:ID]/obj'/>

В качестве альтернативы, сохраните соответствующее значение в переменной перед раздачей ....

<xsl:variable name="id" select="cac:AdditionalDocumentReference/cbc:ID" />
<xsl:value-of select='$QueryResult[ac_name = $id]/obj'/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...