0

私は次のxmlドキュメントを持っています(私は無関係なデータをクリアしました):

<?xml version="1.0"?>
<NewOrderNotification xmlns="http://payments.amazon.com/checkout/2008-11-30/">
  <ProcessedOrder>
    <ShippingServiceLevel>blah</ShippingServiceLevel>
    <ProcessedOrderItems>
      <ProcessedOrderItem>
        <AmazonOrderItemCode>blah</AmazonOrderItemCode>
        <Price>
          <Amount>0.2</Amount>
          <CurrencyCode>GBP</CurrencyCode>
        </Price>
        <ItemCharges>
          <Component>
            <Type>Principal</Type>
            <Charge>
              <Amount>0.2</Amount>
              <CurrencyCode>GBP</CurrencyCode>
            </Charge>
          </Component>
          <Component>
            <Type>Shipping</Type>
            <Charge>
              <Amount>0.95</Amount>
              <CurrencyCode>GBP</CurrencyCode>
            </Charge>
          </Component>
          <Component>
            <Type>PrincipalPromo</Type>
            <Charge>
              <Amount>0.0</Amount>
              <CurrencyCode>GBP</CurrencyCode>
            </Charge>
          </Component>
          <Component>
            <Type>ShippingPromo</Type>
            <Charge>
              <Amount>0.0</Amount>
              <CurrencyCode>GBP</CurrencyCode>
            </Charge>
          </Component>
        </ItemCharges>
        <ShippingCustomData>null</ShippingCustomData>
      </ProcessedOrderItem>
    </ProcessedOrderItems>
  </ProcessedOrder>
</NewOrderNotification>

<Amount>5つの異なる要素内の各値を取得するためのxpath構文を知りたいです。

つまり、次のそれぞれをどのように抽出しますか。

  • NewOrderNotification-ProcessedOrder-ProcessedOrderItems-ProcessedOrderItem-価格-金額

  • NewOrderNotification-ProcessedOrder-ProcessedOrderItems-ProcessedOrderItem-ItemCharges-Component(with type = Principle)-Charge-Amount

  • NewOrderNotification-ProcessedOrder-ProcessedOrderItems-ProcessedOrderItem-ItemCharges-Component(with type = Shipping)-Charge-Amount

  • NewOrderNotification-ProcessedOrder-ProcessedOrderItems-ProcessedOrderItem-ItemCharges-Component(with type = PrincipalPromo)-Charge-Amount

  • NewOrderNotification-ProcessedOrder-ProcessedOrderItems-ProcessedOrderItem-ItemCharges-Component(with type = ShippingPromo)-Charge-Amount

ルート要素のxmlnsに注意してください。

これは、要素を抽出するために使用しているJScriptコードです。

var xmlDoc = Server.CreateObject("Msxml2.DOMDocument.6.0");
xmlDoc.setProperty("SelectionNamespaces", "xmlns:a='http://payments.amazon.com/checkout/2008-11-30/'");
xmlDoc.loadXML(xml);
var node = xmlDoc.documentElement.selectSingleNode("XPATH_IN_HERE");
return node.text;
4

3 に答える 3

1

あなたがちょうどで得ることができる最初の量:

//Price/Amount/text()
#=> "0.2"

他の4つについては、前の兄弟Type要素のテキストを使用してそれらの値を取得できます。

//Charge[preceding-sibling::Type="Principal"]/Amount/text()
#=> "0.2"

//Charge[preceding-sibling::Type="Shipping"]/Amount/text()
#=> "0.95"

//Charge[preceding-sibling::Type="PrincipalPromo"]/Amount/text()
#=> "0.0"

//Charge[preceding-sibling::Type="ShippingPromo"]/Amount/text()
#=> "0.0"

そうだと思います。(私があなたの質問を誤解したかどうか教えてください。)

于 2012-11-05T09:33:05.033 に答える
0

または、省略された絶対パスが好きな場合

'/NewOrderNotification/ProcessedOrder/ProcessedOrderItems/ProcessedOrderItem/ItemCharges/Component[Type="Shipping"]/Charge/Amount/text()'
于 2012-11-05T09:43:00.783 に答える
0

次のxsltスクリプトに、すばやくダーティなxpathを配置します。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:test="http://payments.amazon.com/checkout/2008-11-30/">
    <xsl:output indent="yes"/>

    <!-- Standard if you can define namespaces -->
    <xsl:variable name="amount1" select="//test:Price/test:Amount"/>
    <!-- for cases with namespace problems -->
    <xsl:variable name="amount2" select="//*[local-name() = 'Component'][1]/*[local-name() = 'Charge']/*[local-name() = 'Amount']"/>
    <!-- you can add the other in the same way -->


    <xsl:template match="/">
        <test>
        <variable1><xsl:value-of select="$amount1"/></variable1>    
        <variable2><xsl:value-of select="$amount2"/></variable2>
        </test> 
    </xsl:template>
</xsl:stylesheet>
于 2012-11-05T09:44:14.953 に答える