I am passing following xml as input message in an orchestration. and trying to extract value of "Number" field using the following xpath
identifier = xpath(XMsg, "/[local-name()='x' and namespace-uri()='jabber:x:data']/[local-name()='field' and namespace-uri()='jabber:x:data'][@var='Number']/*[local-name()='value' and namespace-uri()='jabber:x:data']");
but it fails with the error:
"There is an error in the xml document"
Additional error information:
<value xmlns='jabber:x:data'>
was not expected.
xml:
<ns0:x xmlns:ns0="jabber:x:data">
<ns0:field var="Number" label="Number">
<ns0:value>123456</ns0:value>
</ns0:field>
<ns0:field var="ID" label="ID">
<ns0:value>id1</ns0:value>
</ns0:field>
<ns0:field var="Email" label="Email">
<ns0:value>[email protected]</ns0:value>
</ns0:field>
<ns0:field var="Mobile" label="Mobile">
<ns0:value>07123456789</ns0:value>
</ns0:field>
<ns0:field var="Email2" label="Email2">
<ns0:value>[email protected]</ns0:value>
</ns0:field>
<ns0:field var="Status" label="Status">
<ns0:value>Normal</ns0:value>
</ns0:field>
<ns0:field var="Level" label="Status">
<ns0:value>R</ns0:value>
</ns0:field>
<ns0:field var="Country" label="Country">
<ns0:value/>
</ns0:field>
</ns0:x>
Here is my schema
<?xml version="1.0" encoding="utf-16"?>
<xs:schema xmlns:b="; xmlns:tns="jabber:x:data" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="jabber:x:data" xmlns:xs=";>
<xs:element name="x">
<xs:complexType>
<xs:sequence minOccurs="0">
<xs:element maxOccurs="unbounded" name="field">
<xs:complexType>
<xs:sequence>
<xs:element name="value" type="xs:string" />
</xs:sequence>
<xs:attribute name="var" type="xs:string" use="required" />
<xs:attribute name="label" type="xs:string" use="optional" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Can't see anything wrong. Please help me get this resolved. I want to extract value of Number field using the above xpath. Thank you
I am passing following xml as input message in an orchestration. and trying to extract value of "Number" field using the following xpath
identifier = xpath(XMsg, "/[local-name()='x' and namespace-uri()='jabber:x:data']/[local-name()='field' and namespace-uri()='jabber:x:data'][@var='Number']/*[local-name()='value' and namespace-uri()='jabber:x:data']");
but it fails with the error:
"There is an error in the xml document"
Additional error information:
<value xmlns='jabber:x:data'>
was not expected.
xml:
<ns0:x xmlns:ns0="jabber:x:data">
<ns0:field var="Number" label="Number">
<ns0:value>123456</ns0:value>
</ns0:field>
<ns0:field var="ID" label="ID">
<ns0:value>id1</ns0:value>
</ns0:field>
<ns0:field var="Email" label="Email">
<ns0:value>[email protected]</ns0:value>
</ns0:field>
<ns0:field var="Mobile" label="Mobile">
<ns0:value>07123456789</ns0:value>
</ns0:field>
<ns0:field var="Email2" label="Email2">
<ns0:value>[email protected]</ns0:value>
</ns0:field>
<ns0:field var="Status" label="Status">
<ns0:value>Normal</ns0:value>
</ns0:field>
<ns0:field var="Level" label="Status">
<ns0:value>R</ns0:value>
</ns0:field>
<ns0:field var="Country" label="Country">
<ns0:value/>
</ns0:field>
</ns0:x>
Here is my schema
<?xml version="1.0" encoding="utf-16"?>
<xs:schema xmlns:b="http://schemas.microsoft/BizTalk/2003" xmlns:tns="jabber:x:data" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="jabber:x:data" xmlns:xs="http://www.w3./2001/XMLSchema">
<xs:element name="x">
<xs:complexType>
<xs:sequence minOccurs="0">
<xs:element maxOccurs="unbounded" name="field">
<xs:complexType>
<xs:sequence>
<xs:element name="value" type="xs:string" />
</xs:sequence>
<xs:attribute name="var" type="xs:string" use="required" />
<xs:attribute name="label" type="xs:string" use="optional" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Can't see anything wrong. Please help me get this resolved. I want to extract value of Number field using the above xpath. Thank you
Share Improve this question asked Mar 6 at 17:23 manibestmanibest 132 bronze badges 1- What is your BizTalk version? – Yitzhak Khabinsky Commented Mar 6 at 18:25
2 Answers
Reset to default 1Please try the following XPath expression:
/*[local-name()='x' and namespace-uri()='jabber:x:data']/*[local-name()='field' and namespace-uri()='jabber:x:data'][@var='Number']/*[local-name()='value' and namespace-uri()='jabber:x:data']/text()
It is better to use a latest version of BizTalk. It is using Saxons' engine that supports XPath 3.1.
No need to deal with namespaces. You can use a wildcard instead:
/*:x/*:field[@var="Number"]/*:value
Because you xml have namespace, change this line:
<xs:element name="value" type="xs:string" />
to:
<xs:element name="value" type="xs:string" form="qualified"/>
The xpath is than:
string value = XDocument.XPathEvaluate("/x[local-name()='x' and namespace-uri()='jabber:x:data']/field[local-name()='field' and namespace-uri()='jabber:x:data' and @var='Number']/value[local-name()='value' and namespace-uri()='jabber:x:data']").ToString();
发布者:admin,转转请注明出处:http://www.yc00.com/questions/1744959407a4603397.html
评论列表(0条)