Xml 如果Node=X并且我需要Node=X所在文件夹中的信息,如何使用select the right way的值

Xml 如果Node=X并且我需要Node=X所在文件夹中的信息,如何使用select the right way的值,xml,xslt,Xml,Xslt,我在从节点选择值时遇到问题。我想从ID为2的发票行中选择存储在cac:item/cbc:name中的信息。我似乎无法正确使用select的值,因为它总是从第一个节点(InvoiceLince中ID为1的节点)获取答案。有人能帮我从ID为2的发票行中选择cac:item/cbc:name中存储的值吗 <InvoiceLine> <ID>1</ID> <LineExtensionAmount currencyID="EUR">0</LineExt

我在从节点选择值时遇到问题。我想从ID为2的发票行中选择存储在cac:item/cbc:name中的信息。我似乎无法正确使用select的值,因为它总是从第一个节点(InvoiceLince中ID为1的节点)获取答案。有人能帮我从ID为2的发票行中选择cac:item/cbc:name中存储的值吗

<InvoiceLine>
<ID>1</ID>
<LineExtensionAmount currencyID="EUR">0</LineExtensionAmount>
<TaxTotal>
<TaxAmount currencyID="EUR">0</TaxAmount>
<TaxSubtotal>
<TaxableAmount currencyID="EUR">0</TaxableAmount>
<TaxAmount currencyID="EUR">0</TaxAmount>
<TaxCategory>
<ID>S</ID>
<Percent>0</Percent>
<TaxScheme>
<ID>VAT</ID>
</TaxScheme>
</TaxCategory>
</TaxSubtotal>
</TaxTotal>
<Item>
<Name>
Relatienaam:    : BLABLA
Bezoekadres : BLABLA2
</Name>
</Item>
<Price>
<PriceAmount currencyID="EUR">0</PriceAmount>
</Price>
</InvoiceLine>
<InvoiceLine>
<ID>2</ID>
<LineExtensionAmount currencyID="EUR">0</LineExtensionAmount>
<TaxTotal>
<TaxAmount currencyID="EUR">0</TaxAmount>
<TaxSubtotal>
<TaxableAmount currencyID="EUR">0</TaxableAmount>
<TaxAmount currencyID="EUR">0</TaxAmount>
<TaxCategory>
<ID>S</ID>
<Percent>0</Percent>
<TaxScheme>
<ID>VAT</ID>
</TaxScheme>
</TaxCategory>
</TaxSubtotal>
</TaxTotal>
<Item>
<Name>685000/06.0009/7603/355132.01</Name>
</Item>
<Price>
<PriceAmount currencyID="EUR">0</PriceAmount>
</Price>
</InvoiceLine>

1.
0
0
0
0
s
0
增值税
关系:布拉布拉
贝佐卡德雷斯:布拉布拉2
0
2.
0
0
0
0
s
0
增值税
685000/06.0009/7603/355132.01
0
我已经尝试了以下代码:

<xsl:template match="/">
   <xsl:for-each select="/x:Invoice/InvoiceLine/ID[ID='2']">
      <xsl:if test="."><xsl:value-of select="substring(translate(cbc:Name,' ',''),1,6)"/></xsl:if>
   </xsl:for-each>
</xsl:template>

我预计产量为68.5万辆,而不是1.5万辆。我做错什么了吗?

你(可能)想要的表达是

/x:Invoice/InvoiceLine[ID='2']
目前,通过执行
/x:Invoice/InvoiceLine/ID[ID='2']
,您正在选择
ID
元素本身,但仅当该
ID
的子
ID
为2时(它没有)

通过执行
/x:Invoice/InvoiceLine[ID='2']
选择的是
InvoiceLine
元素,因此相对表达式
cbc:Name
也应该返回一些内容

请注意,这假设您正确地处理了名称空间,因为您实际上没有在XML中显示任何名称空间声明

(注意,如果您确实想要选择
ID
元素,您可以编写
/x:Invoice/InvoiceLine/ID[.='2']
,但是要获得
名称,您需要执行
。/cbc:name
,其中
用于获取当前节点的父节点)

您(可能)想要的表达式是

/x:Invoice/InvoiceLine[ID='2']
目前,通过执行
/x:Invoice/InvoiceLine/ID[ID='2']
,您正在选择
ID
元素本身,但仅当该
ID
的子
ID
为2时(它没有)

通过执行
/x:Invoice/InvoiceLine[ID='2']
选择的是
InvoiceLine
元素,因此相对表达式
cbc:Name
也应该返回一些内容

请注意,这假设您正确地处理了名称空间,因为您实际上没有在XML中显示任何名称空间声明


(注意,如果您确实想要选择
ID
元素,您可以编写
/x:Invoice/InvoiceLine/ID[.='2']
,但是要获得
名称
,您需要执行
。/cbc:name
,其中
用于获取当前节点的父节点)

当您编写
/x:Invoice/InvoiceLine/ID[ID='2']

它将在
下找到另一个
ID
元素,我不确定它是否给您提供了错误或任何错误的输出(基于您的描述)

我现在假设您的输入没有名称空间,因为问题中没有提到

尝试:(修改它以添加名称空间或修改问题本身)

假设输入:

<?xml version="1.0" encoding="UTF-8"?>
<Invoice>
<InvoiceLine>
    <ID>1</ID>
    <LineExtensionAmount currencyID="EUR">0
    </LineExtensionAmount>
    <TaxTotal>
        <TaxAmount currencyID="EUR">0</TaxAmount>
        <TaxSubtotal>
            <TaxableAmount currencyID="EUR">0</TaxableAmount>
            <TaxAmount currencyID="EUR">0</TaxAmount>
            <TaxCategory>
                <ID>S</ID>
                <Percent>0</Percent>
                <TaxScheme>
                    <ID>VAT</ID>
                </TaxScheme>
            </TaxCategory>
        </TaxSubtotal>
    </TaxTotal>
    <Item>
        <Name>
            Relatienaam: : BLABLA
            Bezoekadres : BLABLA2
        </Name>
    </Item>
    <Price>
        <PriceAmount currencyID="EUR">0</PriceAmount>
    </Price>
</InvoiceLine>
<InvoiceLine>
    <ID>2</ID>
    <LineExtensionAmount currencyID="EUR">0
    </LineExtensionAmount>
    <TaxTotal>
        <TaxAmount currencyID="EUR">0</TaxAmount>
        <TaxSubtotal>
            <TaxableAmount currencyID="EUR">0</TaxableAmount>
            <TaxAmount currencyID="EUR">0</TaxAmount>
            <TaxCategory>
                <ID>S</ID>
                <Percent>0</Percent>
                <TaxScheme>
                    <ID>VAT</ID>
                </TaxScheme>
            </TaxCategory>
        </TaxSubtotal>
    </TaxTotal>
    <Item>
        <Name>685000/06.0009/7603/355132.01</Name>
    </Item>
    <Price>
        <PriceAmount currencyID="EUR">0</PriceAmount>
    </Price>
</InvoiceLine>
</Invoice>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">

<xsl:output method="xml" indent="yes" />
<xsl:strip-space elements="*" />

<xsl:template match="/">
    <xsl:for-each select="/Invoice/InvoiceLine">
        <xsl:if test="ID ='2'">
            <xsl:value-of select="substring(translate(Item/Name,' ',''),1,6)" />
        </xsl:if>
    </xsl:for-each>
</xsl:template>

</xsl:stylesheet>

1.
0
0
0
0
s
0
增值税
关系:布拉布拉
贝佐卡德雷斯:布拉布拉2
0
2.
0
0
0
0
s
0
增值税
685000/06.0009/7603/355132.01
0
解决方案可以是:

<?xml version="1.0" encoding="UTF-8"?>
<Invoice>
<InvoiceLine>
    <ID>1</ID>
    <LineExtensionAmount currencyID="EUR">0
    </LineExtensionAmount>
    <TaxTotal>
        <TaxAmount currencyID="EUR">0</TaxAmount>
        <TaxSubtotal>
            <TaxableAmount currencyID="EUR">0</TaxableAmount>
            <TaxAmount currencyID="EUR">0</TaxAmount>
            <TaxCategory>
                <ID>S</ID>
                <Percent>0</Percent>
                <TaxScheme>
                    <ID>VAT</ID>
                </TaxScheme>
            </TaxCategory>
        </TaxSubtotal>
    </TaxTotal>
    <Item>
        <Name>
            Relatienaam: : BLABLA
            Bezoekadres : BLABLA2
        </Name>
    </Item>
    <Price>
        <PriceAmount currencyID="EUR">0</PriceAmount>
    </Price>
</InvoiceLine>
<InvoiceLine>
    <ID>2</ID>
    <LineExtensionAmount currencyID="EUR">0
    </LineExtensionAmount>
    <TaxTotal>
        <TaxAmount currencyID="EUR">0</TaxAmount>
        <TaxSubtotal>
            <TaxableAmount currencyID="EUR">0</TaxableAmount>
            <TaxAmount currencyID="EUR">0</TaxAmount>
            <TaxCategory>
                <ID>S</ID>
                <Percent>0</Percent>
                <TaxScheme>
                    <ID>VAT</ID>
                </TaxScheme>
            </TaxCategory>
        </TaxSubtotal>
    </TaxTotal>
    <Item>
        <Name>685000/06.0009/7603/355132.01</Name>
    </Item>
    <Price>
        <PriceAmount currencyID="EUR">0</PriceAmount>
    </Price>
</InvoiceLine>
</Invoice>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">

<xsl:output method="xml" indent="yes" />
<xsl:strip-space elements="*" />

<xsl:template match="/">
    <xsl:for-each select="/Invoice/InvoiceLine">
        <xsl:if test="ID ='2'">
            <xsl:value-of select="substring(translate(Item/Name,' ',''),1,6)" />
        </xsl:if>
    </xsl:for-each>
</xsl:template>

</xsl:stylesheet>


在这里找到演示:

当您编写
/x:Invoice/InvoiceLine/ID[ID='2']

它将在
下找到另一个
ID
元素,我不确定它是否给您提供了错误或任何错误的输出(基于您的描述)

我现在假设您的输入没有名称空间,因为问题中没有提到

尝试:(修改它以添加名称空间或修改问题本身)

假设输入:

<?xml version="1.0" encoding="UTF-8"?>
<Invoice>
<InvoiceLine>
    <ID>1</ID>
    <LineExtensionAmount currencyID="EUR">0
    </LineExtensionAmount>
    <TaxTotal>
        <TaxAmount currencyID="EUR">0</TaxAmount>
        <TaxSubtotal>
            <TaxableAmount currencyID="EUR">0</TaxableAmount>
            <TaxAmount currencyID="EUR">0</TaxAmount>
            <TaxCategory>
                <ID>S</ID>
                <Percent>0</Percent>
                <TaxScheme>
                    <ID>VAT</ID>
                </TaxScheme>
            </TaxCategory>
        </TaxSubtotal>
    </TaxTotal>
    <Item>
        <Name>
            Relatienaam: : BLABLA
            Bezoekadres : BLABLA2
        </Name>
    </Item>
    <Price>
        <PriceAmount currencyID="EUR">0</PriceAmount>
    </Price>
</InvoiceLine>
<InvoiceLine>
    <ID>2</ID>
    <LineExtensionAmount currencyID="EUR">0
    </LineExtensionAmount>
    <TaxTotal>
        <TaxAmount currencyID="EUR">0</TaxAmount>
        <TaxSubtotal>
            <TaxableAmount currencyID="EUR">0</TaxableAmount>
            <TaxAmount currencyID="EUR">0</TaxAmount>
            <TaxCategory>
                <ID>S</ID>
                <Percent>0</Percent>
                <TaxScheme>
                    <ID>VAT</ID>
                </TaxScheme>
            </TaxCategory>
        </TaxSubtotal>
    </TaxTotal>
    <Item>
        <Name>685000/06.0009/7603/355132.01</Name>
    </Item>
    <Price>
        <PriceAmount currencyID="EUR">0</PriceAmount>
    </Price>
</InvoiceLine>
</Invoice>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">

<xsl:output method="xml" indent="yes" />
<xsl:strip-space elements="*" />

<xsl:template match="/">
    <xsl:for-each select="/Invoice/InvoiceLine">
        <xsl:if test="ID ='2'">
            <xsl:value-of select="substring(translate(Item/Name,' ',''),1,6)" />
        </xsl:if>
    </xsl:for-each>
</xsl:template>

</xsl:stylesheet>

1.
0
0
0
0
s
0
增值税
关系:布拉布拉
贝佐卡德雷斯:布拉布拉2
0
2.
0
0
0
0
s
0
增值税
685000/06.0009/7603/355132.01
0
解决方案可以是:

<?xml version="1.0" encoding="UTF-8"?>
<Invoice>
<InvoiceLine>
    <ID>1</ID>
    <LineExtensionAmount currencyID="EUR">0
    </LineExtensionAmount>
    <TaxTotal>
        <TaxAmount currencyID="EUR">0</TaxAmount>
        <TaxSubtotal>
            <TaxableAmount currencyID="EUR">0</TaxableAmount>
            <TaxAmount currencyID="EUR">0</TaxAmount>
            <TaxCategory>
                <ID>S</ID>
                <Percent>0</Percent>
                <TaxScheme>
                    <ID>VAT</ID>
                </TaxScheme>
            </TaxCategory>
        </TaxSubtotal>
    </TaxTotal>
    <Item>
        <Name>
            Relatienaam: : BLABLA
            Bezoekadres : BLABLA2
        </Name>
    </Item>
    <Price>
        <PriceAmount currencyID="EUR">0</PriceAmount>
    </Price>
</InvoiceLine>
<InvoiceLine>
    <ID>2</ID>
    <LineExtensionAmount currencyID="EUR">0
    </LineExtensionAmount>
    <TaxTotal>
        <TaxAmount currencyID="EUR">0</TaxAmount>
        <TaxSubtotal>
            <TaxableAmount currencyID="EUR">0</TaxableAmount>
            <TaxAmount currencyID="EUR">0</TaxAmount>
            <TaxCategory>
                <ID>S</ID>
                <Percent>0</Percent>
                <TaxScheme>
                    <ID>VAT</ID>
                </TaxScheme>
            </TaxCategory>
        </TaxSubtotal>
    </TaxTotal>
    <Item>
        <Name>685000/06.0009/7603/355132.01</Name>
    </Item>
    <Price>
        <PriceAmount currencyID="EUR">0</PriceAmount>
    </Price>
</InvoiceLine>
</Invoice>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">

<xsl:output method="xml" indent="yes" />
<xsl:strip-space elements="*" />

<xsl:template match="/">
    <xsl:for-each select="/Invoice/InvoiceLine">
        <xsl:if test="ID ='2'">
            <xsl:value-of select="substring(translate(Item/Name,' ',''),1,6)" />
        </xsl:if>
    </xsl:for-each>
</xsl:template>

</xsl:stylesheet>


在这里找到演示:

谢谢你,维比!它显示正确的uitcome(cbc中的行:ID=2的发票行的名称)。非常感谢。谢谢你,维比!它显示正确的uitcome(cbc中的行:ID=2的发票行的名称)。非常感谢。