2016-08-11 19 views
0

のxml:ヘンデルの名前空間 - XSLT

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<soap:Body> 
    <GetDataResponse xmlns="http://example.com/webservices/"> 
    <GetDataResult> 
     <diffgr:diffgram xmlns:msdata="urn:schemas-abc-com:xml-msdata" xmlns:diffgr="urn:schemas-abc-com:xml-diffgram-v1"> 
      <CompListData xmlns=""> 
       <Table diffgr:id="Table1" msdata:rowOrder="0" diffgr:hasChanges="inserted"> 
       <Comp>JL-C</Comp> 
       <Type>JOB</Type> 
       <Cost>Lakhs</Cost> 
       </Table> 
       <Table diffgr:id="Table2" msdata:rowOrder="1" diffgr:hasChanges="inserted"> 
       <Comp>JL-C1</Comp> 
       <Type>JOB1</Type> 
       <Cost>Lakhs</Cost> 
       </Table> 
      </CompListData> 
     </diffgr:diffgram> 
    </GetDataResult> 
    </GetDataResponse> 
</soap:Body> 
</soap:Envelope> 

XSLT:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
exclude-result-prefixes="s xsi xsd "> 
<xsl:output method="xml" indent="yes"></xsl:output> 
<xsl:strip-space elements="*" /> 
<xsl:template match="/"> 

    <xsl:if test="s:Envelope/s:Body/GetDataResponse/GetDataResult/diffgr/CompListData/TableTable[@id='Table1']/Type"> 
     <JobType1> 
      <xsl:value-of 
       select="s:Envelope/s:Body/GetDataResponse/GetDataResult/diffgr/CompListData/TableTable[@id='Table1']/Type"></xsl:value-of> 
     </JobType1> 
    </xsl:if> 
<xsl:if test="s:Envelope/s:Body/GetDataResponse/GetDataResult/diffgr/CompListData/TableTable[@id='Table2']/Type"> 
     <JobType2> 
      <xsl:value-of 
       select="s:Envelope/s:Body/GetDataResponse/GetDataResult/diffgr/CompListData/TableTable[@id='Table2']/Type"></xsl:value-of> 
     </JobType2> 
    </xsl:if> 
</xsl:template> 
</xsl:stylesheet> 

出力イム取得は、XSLT

<?xml version="1.0" encoding="UTF-8"?> 
の最初の行であります

身体の中で「diffgr:diffgram」を扱い、 'JobType'タグで 'Type'の値を取得する方法を教えてもらえますか?

答えて

1

あなたのXPath式には、いくつかの欠陥がある - 主に、GetDataResponseGetDataResultdiffgram要素の名前空間を無視して、だけでなく、id属性のことを。

diffgramの代わりにdiffgrTableの代わりにTableTableと書きました。

ではなく、試してみてください。

XSLTここで生成された結果は整形式のXML文書(なし、単一のルート要素)ではないことを1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:w="http://example.com/webservices/" 
xmlns:d="urn:schemas-abc-com:xml-diffgram-v1" 
exclude-result-prefixes="s w d"> 
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/> 

<xsl:template match="/"> 
    <xsl:variable name="jobtype1" select="s:Envelope/s:Body/w:GetDataResponse/w:GetDataResult/d:diffgram/CompListData/Table[@d:id='Table1']/Type" /> 
    <xsl:variable name="jobtype2" select="s:Envelope/s:Body/w:GetDataResponse/w:GetDataResult/d:diffgram/CompListData/Table[@d:id='Table2']/Type" /> 
    <xsl:if test="$jobtype1"> 
     <JobType1> 
      <xsl:value-of select="$jobtype1"/> 
     </JobType1> 
    </xsl:if> 
    <xsl:if test="$jobtype2"> 
     <JobType2> 
      <xsl:value-of select="$jobtype2"/> 
     </JobType2> 
    </xsl:if> 
</xsl:template> 

</xsl:stylesheet> 

れていません。

+0

- ありがとう、確かにかなり多くの間違い、新しい名前空間の扱い – Ranjan

関連する問題