0

Web サービスから返される結果を処理するために xslt を使用しています。最初に、結果がどの Web サービスに対するものかを判断する必要があります。タグ platformCore:record に属性 "xsi:type="listRel:Contact または "xsi:type="listEmp:Employee" があることは知っています。属性が格納している値を選択しようとしていますが、コロンが値を選択しようとすると、いくつかの問題が発生します。

これが私が試したものですが、うまくいきません。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />
<xsl:template match="/">

<xsl:variable name="Type"><xsl:value-of select="//*[local-name()='searchResponse']//*[local-name()='searchResult']//*[local-name()='recordList']//*[local-name()='record']@xsi:type"/></xsl:variable>

<root>
<test><xsl:value-of select="$Type"/></test>
</root>
</xsl:template>
</xsl:stylesheet>

ここに簡単なサンプルがあります

<?xml version="1.0" encoding="UTF-8"?>
<searchResponse:searchResponse xmlns="urn:messages_2012_2.platform.webservices.itsthesuite.com" 
                               xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
                               xmlns:searchResponse="urn:messages_2012_2.platform.webservices.itsthesuite.com"
                               xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
                               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <platformCore:searchResult xmlns:platformCore="urn:core_2012_2.platform.webservices.itsthesuite.com">
    <platformCore:status isSuccess="true"/>
    <platformCore:totalRecords>1</platformCore:totalRecords>
    <platformCore:recordList>
      <platformCore:record internalId="154098" xsi:type="listRel:Contact" xmlns:listRel="urn:relationships_2012_2.lists.webservices.itsthesuite.com">
        <listRel:entityId>John Smith</listRel:entityId>
        <listRel:firstName>John</listRel:firstName>
        <listRel:lastName>Smith</listRel:lastName>
        <listRel:phone>(777) 777-7777</listRel:phone>
        <listRel:email>john.smith@yormoms.com</listRel:email>
      </platformCore:record>
    </platformCore:recordList>
  </platformCore:searchResult>
</searchResponse:searchResponse>

このサンプルでも機能するソリューションが必要です。

従業員サンプル

        <?xml version="1.0" encoding="UTF-8"?>
<searchResponse xmlns="urn:messages_2012_2.platform.webservices.netsuite.com" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:searchResponse="urn:messages_2012_2.platform.webservices.netsuite.com" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<platformCore:searchResult xmlns:platformCore="urn:core_2012_2.platform.webservices.netsuite.com" >
<platformCore:status isSuccess="true"/>
<platformCore:totalRecords>1</platformCore:totalRecords>
<platformCore:recordList>
<platformCore:record internalId="158778" xsi:type="listEmp:Employee" xmlns:listEmp="urn:employees_2012_2.lists.webservices.netsuite.com">
<listEmp:entityId>331sfds Dipo  Chaponda</listEmp:entityId>
<listEmp:salutation>Mr.</listEmp:salutation>
<listEmp:firstName>Dipo</listEmp:firstName>
<listEmp:lastName>Chaponda</listEmp:lastName>
<listEmp:email>dchapond@youmm.com</listEmp:email>
</platformCore:record>
</platformCore:recordList>
</platformCore:searchResult>
</searchResponse>
4

1 に答える 1

2

すでに行っているのと同様にローカル名を使用して属性を選択できますが、*の前に@を付けます。

@*[local-name() = 'type']

local-name() =ただし、XPathにダブルスラッシュを散らかすことはお勧めできません。名前空間を適切に使用し、既知の場合は正確なパスを使用する必要がありますが、2つの例では異なる名前空間を使用しているため、この場合の要素のオプションではないようです。これは機能するはずです:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                exclude-result-prefixes="sr pc xsi"
                >

  <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />
  <xsl:template match="/">

    <xsl:variable name="Type">
      <xsl:value-of select="*[local-name() = 'searchResponse']/
                            *[local-name() = 'searchResult']/
                            *[local-name() = 'recordList']/
                            *[local-name() = 'record']/
                            @xsi:type"/>
    </xsl:variable>

    <root>
      <test>
        <xsl:value-of select="$Type"/>
      </test>
    </root>
  </xsl:template>
</xsl:stylesheet>

サンプル入力で実行すると、期待される結果が得られます。

<root>
  <test>listRel:Contact</test>
</root>
于 2013-03-19T02:23:37.240 に答える