开发者

How to check if a node's value in one XML is present in another XML with a specific attribute?

开发者 https://www.devze.com 2023-01-02 16:32 出处:网络
The question seems to be little confusing. So let me describe my situation through an example: Suppose I have an XML:

The question seems to be little confusing. So let me describe my situation through an example:

Suppose I have an XML: A.xml

<Cakes>
    <Cake>Egg</Cake>
    <Cake>Banana</Cake>
</Cakes>

Another XML: B.xml

<Cakes>
    <Cake show="true">Egg</Cake>
    <Cake show="true">Strawberry</Cake>
    <Cake show="false">Banana</Cake>
</Cakes>

Now I want to show some text say "TRUE" if all the Cake in A.xml have show="true" in B.xml else "FALSE".

In the above case, it will print FALSE.

I need to develop an XSL for that. I can loop through all the Cake in A.xml and check if that cake has show="true" in B.xml but I don't know 开发者_如何学Gohow to break in between (and set a variable) if a show="false" is found.

Is it possible? Any help/comments appreciated.


<xsl:choose>
<xsl:when test="count(document('B.xml')/Cakes/Cake[@show='true' AND text() = /Cakes/Cake/text()]) = count(/Cakes/Cake)">
true
</xsl:when>
<xsl:otherwise>
false
</xsl:otherwise>

Should help you (not 100% sure)


The problem here is that you can't update Variables in XSL; XSL Variables are Assign Once only, but that can be assigned conditionally.

I think the simpler and saner option would be to use smaller fragments of XSL and programatically call them from a proper programming language, which can use XPath to make descisions.


I think the best way of putting it would be:

Is there at least one element "Cake" into "A.xml" that not have the same string-value than any element "Cake" into "B.xml" whose attribute "show" is "true" ?

So, in xpath 1.0:

document('A.xml')/Cakes/Cake[not(. = document('B.xml')/Cakes/Cake[@show='true'])]

Note: I apologize for the translation. I speak Spanish.


One of the simplest XPath expressions that correctly evaluates this condition is:

not(document('B.xml')/*/Cake[@show !='true'] = /*/Cake)
0

精彩评论

暂无评论...
验证码 换一张
取 消