xml:
<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'的值。
答案 0 :(得分:1)
您的XPath表达式有几个缺陷 - 主要是忽略GetDataResponse
,GetDataResult
和diffgram
元素的名称空间,以及id
属性的名称空间。
你还写了diffgr
而不是diffgram
,TableTable
而不是Table
。
尝试改为:
XSLT 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>
并非此处生成的结果不是格式良好的XML文档(没有单个根元素)。