XML Editor
Sign up for a WebBoard account Sign Up Keyword Search Search More Options... Options
Chat Rooms Chat Help Help News News Log in to WebBoard Log in Not Logged in
Conferences Close Tree View
+ Stylus Studio Feature Requests (1192)
+ Stylus Studio Technical Forum (14621)
+ Website Feedback (249)
- XSLT Help and Discussion (7625)
-> + How to change XSLT parameter s... (3)
-> + how to change format of the da... (2)
-> + Search "Next 8 Results " doesn... (2)
-> - Support for Git (1)
-> + newbee (8)
-> + How to substitute element or t... (2)
-> + Xalan support in x16? (2)
-> + The context item for axis step... (5)
-> - ASP to XSL (1)
-> + xsl report, with xml feed, SVG... (7)
-> + XSLT code to transform CSV typ... (2)
-> + Make xstl file working in brow... (4)
-> + identity template, result-docu... (6)
-> - identity template and xsl:resu... (1)
-> + java.lang.RuntimeException: Er... (5)
-> + How to check matching parenthe... (2)
-> - Error only on using xalan:eval... (1)
-> + XSLT not displaying SOAP respo... (2)
-> + How do i delete the node from ... (2)
-> + How to break xslt lines to mak... (4)
-> - Marge node using attribute val... (1)
-> - Replce utf to unicode using xs... (1)
-> - getting different instances of... (1)
-> + XML to Flat (4)
-> + non breaking space   in e... (2)
-> - How can i attach a empty names... (1)
-> + Cannot find a matching 1-argum... (7)
-> - get value from different docum... (1)
-> + How can I change the XML heade... (2)
-> + Stylus Studio and Datapower (9)
-> + Generate XML form a XSD (2)
-> + There is no way to run xslt tr... (3)
-> + XML-Source NS is copied into t... (3)
-> + new guy attempting xslt (2)
-> + XML 2011 question (7)
-> + Manipulating XML with external... (2)
-> + removing duplicates from xml w... (8)
-> + Wnat to use presence of tag t... (2)
-> + modifing Andrew Welch's csv 2 ... (5)
-> + Can't use (or see) XSLT or WYS... (3)
-> + Delete the xsi:nil attribute ... (2)
-> + FOTY0012: Cannot get the typed... (20)
-> + XSLT Mapper - Two way xslt map... (2)
-> + EDI (5)
-> + XSL Test for lack of XML eleme... (4)
-> + Trouble Calling a java functio... (4)
-> + How to generate EDI 997 (2)
-> + followup on tokenize with /r (5)
-> + tokenize a string with \r (4)
-> + How to convert XML to XLS file... (2)
-> - How to convert XML to XLS file... (1)
-> + how to pass value to xsl for t... (3)
-> + entity expansion liimit exceed... (4)
-> + Creating XSLT Stylesheet (2)
-> + Create XSLT from XSD (2)
-> + How to remove nodes from xml b... (4)
-> + Highlighting text in XSL file (4)
-> - XSLT to Excel, predefine cell ... (1)
-> + CSaxon8Driver issue...time out (2)
-> + Is it possible to generate a X... (2)
-> + Is there any tool which genera... (2)
-> + xslt to html producing double ... (2)
-> - ADD 2 XML 2 Generate Single XM... (1)
-> + converting XML1 to XML2 struct... (2)
-> + How to remove the name space i... (2)
-> + Dump Payload into String (4)
-> + Converting Global EDIFACT into... (2)
-> + Auto mapping of XSLT? (3)
-> + Numbering a list broken into m... (3)
-> + help in xsl:analyze-string (2)
-> + Use XSLT with SOAP (2)
-> + Order of Processing Child Elem... (2)
-> + XSL finding a node based on va... (2)
-> + grouping a group? (11)
-> + Query on Looping (5)
-> + java.lang.Assertionerror_: Slo... (7)
-> + CONVERT SQL Server data to XML... (11)
-> + Error using "xsltproc" command... (3)
-> + XML refresh via web broswer (3)
-> + XSL-mapping usage for csv file... (4)
-> + form controls with xslt (2)
-> + Stylus Studio 2011 XML Enterpr... (2)
-> + Looping through Itema and gett... (2)
-> + Image src through System Varia... (3)
-> + XSL-mapping usage for csv file... (3)
-> + How to achieve UTF-8 encoding ... (2)
-> + sorting Using JavaScript (6)
-> + Display values from .xml horiz... (5)
-> + query on xslt for-each (3)
-> + query on xslt for-each (2)
-> + issue for First occurance (2)
-> + XSL: Mapping 2 XSD to 1 XSD (2)
-> + xslt mapper looses linkage fro... (2)
-> - How to Modify only few nodes a... (1)
-> + XSLT autocomplete function (2)
-> + i need to display dynamic list... (2)
-> + How to group when source has m... (11)
-> - Using EXCEL to create XSLT for... (1)
-> + Mapper generating XSLT, popula... (2)
-> + multiple columns (2)
-- [1-20] [21-40] [41-60] Next
+ XQuery Help and Discussion (2017)
+ Stylus Studio FAQs (159)
+ Stylus Studio Code Samples & Utilities (364)
+ Stylus Studio Announcements (113)
Topic  
Postnext
Neal WaltersSubject: XPATH selecting higher node
Author: Neal Walters
Date: 26 Apr 2006 03:50 PM
Reference: http://www2.stylusstudio.com/SSDN/default.asp?action=9&read=4616&fid=48

This xpath return the desired property node:
/*[local-name()='MetaModel' and namespace-uri()='http://schemas.microsoft.com/BizTalk/2003/DesignerData']/*[local-name()='Element' and namespace-uri()='http://schemas.microsoft.com/BizTalk/2003/DesignerData']/*[local-name()='Element' and namespace-uri()='http://schemas.microsoft.com/BizTalk/2003/DesignerData']/*[local-name()='Element' and namespace-uri()='http://schemas.microsoft.com/BizTalk/2003/DesignerData']/*[local-name()='Element' and namespace-uri()='http://schemas.microsoft.com/BizTalk/2003/DesignerData']/*[local-name()='Property' and namespace-uri()='http://schemas.microsoft.com/BizTalk/2003/DesignerData'][@Name='MessageName' and @Value='msgConProcReq']

But I want to get the to retrieve one or two nodes higher.
How can I change the axis (is that the right question/terminology)?

Here's a fragment of the XML:
<om:Element Type="ServiceBody" OID="58eb1bd4-e860-4f66-a53d-ea4703f606e0" ParentLink="ServiceDeclaration_ServiceBody">
<om:Property Name="Signal" Value="False" />
<om:Element Type="Receive" OID="caeb374b-8722-4531-8ab3-ec0483ac3026" ParentLink="ServiceBody_Statement" LowerBound="93.1" HigherBound="115.1">
<om:Property Name="Activate" Value="True" />
<om:Property Name="PortName" Value="Port_ReceiveConReq" />
<om:Property Name="MessageName" Value="msgConProcReq" /> <!-- **** This is the value I'm matching on in my XPATH !!!!!!!! -->
<om:Property Name="OperationName" Value="Operation_1" />
<om:Property Name="OperationMessageName" Value="Request" />
<om:Property Name="ReportToAnalyst" Value="True" />
<om:Property Name="Name" Value="ReceiveConstituentProcessRequest" />
<om:Property Name="Signal" Value="True" />
<om:Element Type="DNFPredicate" OID="c78f07c0-2850-4e44-a5f8-50b882af480b" ParentLink="Receive_DNFPredicate">
<om:Property Name="LHS" Value="Compassion.BizTalk.Schemas.Common.PropertySchema.SchemaVersion" />
<om:Property Name="RHS" Value="1" />
<om:Property Name="Grouping" Value="AND" />
<om:Property Name="Operator" Value="LessThanOrEquals" />
<om:Property Name="Signal" Value="False" />
</om:Element>
</om:Element>
<om:Element Type="VariableAssignment" OID="091a9145-c3af-4510-b199-29b1bbb87bad" ParentLink="ServiceBody_Statement" LowerBound="115.1" HigherBound="134.1">
<om:Property Name="Expression" Value="// initialize variables&#xD;&#xA;// this comes from the configuration file&#xD;&#xA;blnTraceFlag = System.Convert.ToBoolean(System.Configuration.ConfigurationSettings.AppSettings.Get(&quot;Compassion.BizTalk.BusinessProcesses.Constituent.ConstituentRequestProcess.TraceFlag&quot;)); &#xD;&#xA;&#xD;&#xA;// these come from incoming SOAP Header (set in pipeline)&#xD;&#xA;strMessageStreamId = msgConProcReq(Compassion.BizTalk.Schemas.Common.MessageStreamId);&#xD;&#xA;strDateTime = System.Convert.ToString(msgConProcReq(Compassion.BizTalk.Schemas.Common.DateTimeStamp));&#xD;&#xA;strMessageId = msgConProcReq(Compassion.BizTalk.Schemas.Common.MessageId);&#xD;&#xA;&#xD;&#xA;// unique to this process&#xD;&#xA;strProcessId = System.Convert.ToString(msgConProcReq(BTS.InterchangeID));&#xD;&#xA;&#xD;&#xA;// set variables for the node names &amp; namespaces&#xD;&#xA;strCANodeName = System.Configuration.ConfigurationSettings.AppSettings.Get(&quot;Compassion.BizTalk.BusinessProcesses.Constituent.ConstituentRequestProcess.ConstituentActionNodeName&quot;);&#xD;&#xA;strCANamespace = System.Configuration.ConfigurationSettings.AppSettings.Get(&quot;Compassion.BizTalk.BusinessProcesses.Constituent.ConstituentRequestProcess.ConstituentActionNamespace&quot;);&#xD;&#xA;strConActionHolderNodeName = System.Configuration.ConfigurationSettings.AppSettings.Get(&quot;Compassion.BizTalk.BusinessProcesses.Constituent.ConstituentRequestProcess.ConstituentActionHolderNodeName&quot;);&#xD;&#xA;strConActionTypeRequestNamespace = System.Configuration.ConfigurationSettings.AppSettings.Get(&quot;Compassion.BizTalk.BusinessProcesses.Constituent.ConstituentRequestProcess.ConstituentActionTypeRequestNamespace&quot;);&#xD;&#xA;strConActionTypeReqSchemaVersion = System.Configuration.ConfigurationSettings.AppSettings.Get(&quot;Compassion.BizTalk.BusinessProcesses.Constituent.ConstituentRequestProcess.ConstituentActionTypeRequestVersion&quot;);" />
<om:Property Name="ReportToAnalyst" Value="True" />
<om:Property Name="Name" Value="InitializeProcessVariables" />
<om:Property Name="Signal" Value="True" />
</om:Element>



Thanks,
Neal Walters
http://Biztalk-Training.com



Postnext
Neal WaltersSubject: XPATH selecting higher node
Author: Neal Walters
Date: 26 Apr 2006 04:24 PM
Part 2 of this question. Why do I need to use the local-name in this case? The first line of the xml contains an xmlns:om clause:

<om:MetaModel MajorVersion="1" MinorVersion="3" Core="2b131234-7959-458d-834f-2dc0769ce683" ScheduleModel="66366196-361d-448d-976f-cab5e87496d2" xmlns:om="http://schemas.microsoft.com/BizTalk/2003/DesignerData">
<om:Element Type="Module" OID="3909d23a-6e5d-41f7-9512-6bd042cd555c" LowerBound="1.1" HigherBound="583.1">

But if I try Xpath such as /om:MetalModel/om:Element it returns nothing.

Neal


Postnext
Tony LavinioSubject: XPATH selecting higher node
Author: Tony Lavinio
Date: 26 Apr 2006 04:29 PM
If your context is the current node, then this would display it:
<xsl:value-of select="."/>

If you want the value of the parent node, you can use:
<xsl:value-of select=".."/>

For the grandparent:
<xsl:value-of select="../.."/>

For the first node named 'joe' that is a sibling of the current node:
<xsl:value-of select="../joe[1]"/>

The W3C spec on this isn't quite as dense as most, and actually
includes quite a few examples. See http://www.w3.org/TR/xpath

Also, a good summary of XPath is Ron Bourret's "XPath in Five
Paragraphs" at http://www.rpbourret.com/xml/XPathIn5.htm

Does this help, or am I totally misunderstanding your question?

Postnext
Tony LavinioSubject: XPATH selecting higher node
Author: Tony Lavinio
Date: 26 Apr 2006 04:32 PM
For part 2, it's hard to answer without seeing more context, but
usually it's because the XPath isn't running with the same namespace
prefix context as the XML.

For example, you might have xmlns:om="xyz" on the root template, but
not on some subsequent template.

Postnext
Neal WaltersSubject: XPATH selecting higher node
Author: Neal Walters
Date: 26 Apr 2006 05:35 PM
I'm not using XSLT. I'm using XmlDom in C#.NET 1.1 and trying to return the XML fragment for further parsing. Of course, I always test my XPath in Stylus Studio GUI first.

So if this wasn't one of those cases where I had to use the local-name clause, I would say something this:

/MetaModel/Element/Element/Element/Element[Property/@Type="MessageName" and Property/@Value="xxxxx"]

So the brackets would be my predicate after the last element node that I want.

With the local-names, it becomes 3 times harder...

Maybe something like this:
/*[local-name()='MetaModel']/*[local-name()='Element']/*[local-name()='Element']/*[local-name()='Element'][local-name()='Element'][Property/@Type="MessageName" and Property/@Value="msgConProcReq"]

but this gives 0 hits, because Property name cannot be referenced without the local-name clause.

We did some of this in this post: http://www2.stylusstudio.com/SSDN/default.asp?action=12&Reply=15026&fid=48&Thread=5018
The secret seemed to be putting two sets of [] next to each other. But in this case I'm trying to select higher, not lower or sideways.

Thanks again,
Neal Walters

Postnext
Neal WaltersSubject: XPATH selecting higher node
Author: Neal Walters
Date: 26 Apr 2006 05:42 PM
I think I understand "normal" XPath, but this local-name stuff drives me crazy. Basically, the whole Xpath becomes a predicate? Where is the axis?

Neal

Postnext
Neal WaltersSubject: XPATH selecting higher node
Author: Neal Walters
Date: 26 Apr 2006 06:08 PM
Here's another way to look at this:

This works, but returns all elements:

/*[local-name()='MetaModel' and namespace-uri()='http://schemas.microsoft.com/BizTalk/2003/DesignerData']/*[local-name()='Element' and namespace-uri()='http://schemas.microsoft.com/BizTalk/2003/DesignerData'][1]/*[local-name()='Element' and namespace-uri()='http://schemas.microsoft.com/BizTalk/2003/DesignerData'][1]/*[local-name()='Element' and namespace-uri()='http://schemas.microsoft.com/BizTalk/2003/DesignerData']/*[local-name()='Element' and namespace-uri()='http://schemas.microsoft.com/BizTalk/2003/DesignerData']

I want to get the same type of data for one specific element.
Thus I wish to qualfiy or add a predicate to the above to limit based on the value of an attribute on the child.

Property is a child of the lowest element, and Property has two attributes, @Name and @Value.

If I add this to the above, then the axis shifts from the element to the property, and I only get the property:
/*[local-name()='Property' and namespace-uri()='http://schemas.microsoft.com/BizTalk/2003/DesignerData' and @Name='MessageName' and @Value='msgConProcReq']

I have also tried adding the same predicate as above without the /* at the beginning, then I get 0 hits.

Thanks, I'm just thinking out-loud and trying to give good examples for future people who have issues in this area.

Can you go back up the tree after a predicate in pure XPATH? such as this?
/*[local-name()='Property' and namespace-uri()='http://schemas.microsoft.com/BizTalk/2003/DesignerData' and @Name='MessageName' and @Value='msgConProcReq']/*[..]

This (above) returns 0 hits, but the following runs and still returns the Property only:

/*[local-name()='Property' and namespace-uri()='http://schemas.microsoft.com/BizTalk/2003/DesignerData' and @Name='MessageName' and @Value='msgConProcReq'][..][..]

and likewise with this:
/*[local-name()='Property' and namespace-uri()='http://schemas.microsoft.com/BizTalk/2003/DesignerData' and @Name='MessageName' and @Value='msgConProcReq'][../*][../*]

Neal




Posttop
Tony LavinioSubject: XPATH selecting higher node
Author: Tony Lavinio
Date: 28 Apr 2006 04:59 PM
Predicates are filters; axes move the cursor.

So you can go up and down the tree:

/root/parent/child[4]/..

gets you to the parent of the fourth child.

Does that help?

   
Download A Free Trial of Stylus Studio 6 XML Professional Edition Today! Powered by Stylus Studio, the world's leading XML IDE for XML, XSLT, XQuery, XML Schema, DTD, XPath, WSDL, XHTML, SQL/XML, and XML Mapping!  
go

Log In Options

Site Map | Privacy Policy | Terms of Use | Trademarks
Stylus Scoop XML Newsletter:
W3C Member
Stylus Studio® and DataDirect XQuery ™are from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2016 All Rights Reserved.