XSLT-从外部XML文档获取特定值

时间:2018-10-02 09:36:17

标签: xml xslt

如果条件满足,我想获得一个特定的值。实现此目的的方法是从原始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 :(得分:1)

问题在于此表达式。...

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

这是在ac_name节点下寻找一个QueryResult/Result,并且在同一cac:AdditionalDocumentReference下寻找一个QueryResult/Result,而实际上您想检查{ {1}}在当前节点下。

cac:AdditionalDocumentReference

或者,将相关值预先存储在变量中。...

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