If you use the following:
[string] s = xpath(msg1, "/*[local-name()='Root' and namespace-uri()='http://TestBiztalkXPathCommand.Schema1'] /*[local-name()='name' and namespace-uri()='']")
to get the value at node "name", you'll receive the following error while running the orchestration:
...
Inner exception: There is an error in the XML document.
Exception type: InvalidOperationException
Source: System.Xml
[...]
Additional error information:
[...]
Target Site: System.Object Read_string()
The reason is that this XPath statements navigates to an XML node and, thus, an object of the class System.Xml.XmlNode is returned (and not a String). Since the XPath statement is not analyzed while building the DLL, the error occurs while running primary.
Thus, you should add /text() to your XPath statement, so that a string is returned. In this case, the following would work successfully:
[string] s = xpath(msg1, "/*[local-name()='Root' and namespace-uri()='http://TestBiztalkXPathCommand.Schema1'] /*[local-name()='name' and namespace-uri()='']/text()")
Charles Young's blogpost on xpath() was helpful to fix this problem.
Addition (June 3, 2008) : My colleague Christian found out that you should invoke some mysterious "string()"-method inside the xpath statement:
xpathExpression = "/*[local-name()='Root' and namespace-uri()='http://TestBiztalkXPathCommand.Schema1'] /*[local-name()='name' and namespace-uri()='']";
[string] s = xpath(msg1, "string(" + xpathExpression + "/text())")
Thus, you get less XPath errors (I don't know yet how that exactly works; but I know that string(...) is not an XPath expression).
2 comments:
Thank you for sharing
I really like
Just what I needed...thanks for sharing this.
Post a Comment