Skip to main content
1-Visitor
June 22, 2013
Question

Two Simple XPATH questions

  • June 22, 2013
  • 12 replies
  • 2474 views

<tag1>


<tag2></tag2>


</tag1>



If I'm in tag2, how do I access tag1? I tried ../tag1[1] and parent[1]



And also, how would I access the first element from an att with XPATH? For example, this didn't work:



<e-i-c gi="code" occur="all">
...
<att>


<specval attname="code[1]" attloc="#xpath" attval="1"/">
<charsubset>...</charsubset>
</att>
</e-i-c>



    12 replies

    1-Visitor
    June 22, 2013
    ../tag1 would work, but I'm not certain what the {1} is attempting to
    represent.


    On Sat, Jun 22, 2013 at 3:02 AM, Caroline Leccese <
    caroline@thecodesource.net> wrote:

    > <tag1>
    >
    > <tag2></tag2>
    >
    > </tag1>
    >
    >
    >
    > If I'm in tag2, how do I access tag1? I tried ../tag1{1} and parent[1]
    >
    1-Visitor
    June 22, 2013
    Ugh, sorry... early morning, I take that back.

    You simply want ".." to get <tag1>

    "..\tag1" would imply the parent's first child named "tag1", which does not
    exist. Likewise, "..\tag2" would get self in current context.

    - keith


    18-Opal
    June 22, 2013
    To further qualify: "parent" is an axis, not a thing itself. So you would want to use something like this:

    parent::tag1

    Or, if the parent element could be something other than tag1, but you want it whatever it is, you could use

    parent::*

    --Clay

    Sent from my iPad

    On Jun 22, 2013, at 6:50 AM, "Keith Berard" <-<<a style="COLOR:" blue;=" text-decoration:=" underline&quot;=" target="_BLANK" href="mailto:-">>">mailto:->> wrote:

    Ugh, sorry... early morning, I take that back.

    You simply want ".." to get <tag1>

    "..\tag1" would imply the parent's first child named "tag1", which does not exist. Likewise, "..\tag2" would get self in current context.

    - keith


    On Sat, Jun 22, 2013 at 7:44 AM, Keith Berard <-<<a style="COLOR:" blue;=" text-decoration:=" underline&quot;=" target="_BLANK" href="mailto:-">>">mailto:->> wrote:
    ../tag1 would work, but I'm not certain what the {1} is attempting to represent.


    On Sat, Jun 22, 2013 at 3:02 AM, Caroline Leccese <caroline@thecodesource.net<<a style="COLOR:" blue;=" text-decoration:=" underline&quot;=" target="_BLANK" href="mailto:caroline@thecodesource.net">>">mailto:caroline@thecodesource.net>> wrote:

    <tag1>

    <tag2></tag2>

    </tag1>



    If I'm in tag2, how do I access tag1? I tried ../tag1{1} and parent[1]

    -----End Original Message-----
    cleccese1-VisitorAuthor
    1-Visitor
    June 22, 2013

    Thanks, guys. So I don't to qualify with [1] such as parent::tagA[1], because I just want the one parent node directly above tagB.



    Also, how would I access the first occurring eic from the all context via XPATH?


    This didn't work:



    <e-i-c gi="code" occur="all">
    ...
    <att>


    <specval attname="code[1]" attloc="#xpath" attval="1"/">
    <charsubset>...</charsubset>
    </att>
    </e-i-c>

    1-Visitor
    June 22, 2013
    You never need a [1] when using the "parent" axis because there is only
    ever one parent node. The "ancestor" axis includes the parent node, its
    parent node and so on, all that way to and including the root node.

    Keep in mind that the axis determines which "direction" you're looking in
    the tree from the context node. The default axis is "child", so "code[1]"
    will select the first child of the context node, which would be a "code"
    element, in your FOSI excerpt. If I'm reading your requirement right,
    you're in one of potential several sibling "code" elements and want to get
    the content of the first such element.

    My first inclination would be to use the "preceding-sibling" axis, with an
    XPath of "preceding-sibling::code[last()]", but that wouldn't work if
    you're already in the first element, so you may want to use "../code[1]",
    instead. For the former, keep in mind that cardinal positions are relative
    to document order except for any "backward-looking" axis, so for
    "preceding-sibling", the "last()" is actually the first one, in document
    order.

    -Brandon 🙂


    On Sat, Jun 22, 2013 at 2:56 PM, Caroline Leccese <
    caroline@thecodesource.net> wrote:

    > Thanks, guys. So I don't to qualify with [1] such as parent::tagA[1],
    > because I just want the one parent node directly above tagB.
    >
    >
    >
    > Also, how would I access the first occurring eic from the all context via
    > XPATH?
    >
    > This didn't work:
    >
    >
    >
    > <e-i-c gi="code" occur="all">
    > ...
    > <att>
    >
    > <specval attname="code[1]" attloc="#xpath" attval="1"/">
    > <charsubset>...</charsubset>
    > </att>
    > </e-i-c>
    >
    cleccese1-VisitorAuthor
    1-Visitor
    June 23, 2013

    Thanks, Brandon.



    So would code[last()] choose the last code element? Or is it ../code[last()]?

    1-Visitor
    June 23, 2013
    Hi Caroline,

    Since you're having trouble with XPath, you might be interested in video
    recordings of Ken Holman's training

    ">http://www.CraneSoftwrights.**com/links/udemy-ptux-online.**htm<http: www.cranesoftwrights.com=" links=" udemy-ptux-online.htm=">

    The video is a recording of the August 2008 version of the 5-day class
    (over 24 hours of instruction). It is now available online as streaming
    video, complete with handouts and exercises:

    You can get $25 off by using coupon code: "PTUX-Single-Sourcing-**Discount"

    Several folks on this list can recommend his classes. He's not traveling as
    much anymore, so it can be hard to get a class that's local to you. The
    video is a nice option. I personally take his class whenever he's in town.
    He's always adding information (jQuery, for example) and he's just a great
    instructor. I always pick up something new whenever I have the opportunity
    to see him.

    Cheers,
    Liz


    On Sat, Jun 22, 2013 at 9:57 PM, Caroline Leccese <
    caroline@thecodesource.net> wrote:

    > Thanks, Brandon.
    >
    >
    >
    > So would code[last()] choose the last code element? Or is it
    > ../code[last()]?
    >
    1-Visitor
    June 23, 2013
    Hi Caroline:

    What exactly are you trying to do? There is probably a FOSI way to do it.

    Good luck!
    Suzanne Napoleon
    www.FOSIexpert.com
    "WYSIWYG is last-century technology!"


    cleccese1-VisitorAuthor
    1-Visitor
    June 24, 2013

    Thanks, Liz. I see there are a bunch of free videos I can check out, too!



    Hi Suzanne,



    I wanted to be able to access the first position (or last) eic without having to code separate first/not first eics because I was having trouble with repeating header titles. I don't think I needed the XPATH after all but I did have a problem with my floats disappearing http://portal.ptcuser.org/p/fo/st/thread=53027

    1-Visitor
    June 24, 2013
    Using occurrence is easiest and most straightforward, so the floating issue needs to be fixed. What is being floated? Are two floatlocs really needed or would one suffice?

    Be sure you know which page model is being used by adding an identifier to each page header or footer or add a region with it. Use color so it is noticeable and doesn't get left in by accident.