XPATH preceding node
I have following XML:
XML
<PatientDetailsXML>
<PList>
<PName type="Patient"> // node [i] = 0
<properties>
<Room bedType="Auto" />
<PName title="Joe Beom" PId="1234">
<Details>
<classification classification="paymenttype" category="Wallet" />
<classification classification="Humor" category="1" />
<classification classification="Food" category="Fruit" />
</Details>
</PName>
</properties>
<childEvents>
</childEvents>
</PName>
<PName type="Patient"> // node[i] =1
<properties>
<Room bedType="Auto" />
<PName title="John Bair" PId="4567">
<Details>
<classification classification="paymenttype" category="Wallet" />
<classification classification="Humor" category="2" />
<classification classification="Food" category="Fruit" />
</Details>
</PName>
</properties>
<childEvents>
</childEvents>
</PName>
<PName type="Patient"> // node[i] = 2
<properties>
<Room bedType="Auto" />
<PName title="Bairstow" PId="1234">
<Details>
<classification classification="paymenttype" category="CreditCard" />
<classification classification="Humor" category="1" />
<classification classification="Food" category="Vegetables" />
</Details>
</PName>
</properties>
<childEvents>
</childEvents>
</PName>
When I'm at node[0]
, i'm doing a search for classification='paymenttype'
and category ='CreditCard'
, I find the 3rd item node[i] = 2
var next = currNode.SelectSingleNode(@"following::classifications/classification[@classification='paymenttype'and @category ='CreditCard'] /ancestor::PName/@title"); // This gives me the title `Bairstow`
Now I need to jump to my previous node where classification='paymenttype'and @category ='CreditCard'
.
var previous = next.SelectSingleNode(@"preceding::classifications/classification[@classification='paymenttype'and @category ='CreditCard']/ancestor::event");
// this doesn't seem to work
CODE
var query = @"//PList/PName[.//PName/classifications/classification[@classification='paymenttype' and @category='Wallet']]";
var nodes = docs.SelectNodes(query).OfType<XmlNode>().ToArray();
XmlNodeList nodeList = docs.SelectNodes(query);
for (int i = 0; i < nodes.Count(); i++)
{
//do something
//jump to method to do something else
string testPayment = Externals.Next(nodes[i]);
}
public static string Next(XMLNode currNode)
{
var next = currNode.SelectSingleNode(@"following::classifications/classification[@classification='Humor'and @category ='1'] /ancestor::PName/@title");
// This gives me the title `Bairstow`
// Now I need to select the title of the previous node e.g.John Bair
var previous = next.SelectSingleNode(@"preceding::classifications/classification[@classification='paymenttype'and @category ='CreditCard']/ancestor::event");
// this is not pointing to the node with title JohnBair
}
c# xpath
|
show 2 more comments
I have following XML:
XML
<PatientDetailsXML>
<PList>
<PName type="Patient"> // node [i] = 0
<properties>
<Room bedType="Auto" />
<PName title="Joe Beom" PId="1234">
<Details>
<classification classification="paymenttype" category="Wallet" />
<classification classification="Humor" category="1" />
<classification classification="Food" category="Fruit" />
</Details>
</PName>
</properties>
<childEvents>
</childEvents>
</PName>
<PName type="Patient"> // node[i] =1
<properties>
<Room bedType="Auto" />
<PName title="John Bair" PId="4567">
<Details>
<classification classification="paymenttype" category="Wallet" />
<classification classification="Humor" category="2" />
<classification classification="Food" category="Fruit" />
</Details>
</PName>
</properties>
<childEvents>
</childEvents>
</PName>
<PName type="Patient"> // node[i] = 2
<properties>
<Room bedType="Auto" />
<PName title="Bairstow" PId="1234">
<Details>
<classification classification="paymenttype" category="CreditCard" />
<classification classification="Humor" category="1" />
<classification classification="Food" category="Vegetables" />
</Details>
</PName>
</properties>
<childEvents>
</childEvents>
</PName>
When I'm at node[0]
, i'm doing a search for classification='paymenttype'
and category ='CreditCard'
, I find the 3rd item node[i] = 2
var next = currNode.SelectSingleNode(@"following::classifications/classification[@classification='paymenttype'and @category ='CreditCard'] /ancestor::PName/@title"); // This gives me the title `Bairstow`
Now I need to jump to my previous node where classification='paymenttype'and @category ='CreditCard'
.
var previous = next.SelectSingleNode(@"preceding::classifications/classification[@classification='paymenttype'and @category ='CreditCard']/ancestor::event");
// this doesn't seem to work
CODE
var query = @"//PList/PName[.//PName/classifications/classification[@classification='paymenttype' and @category='Wallet']]";
var nodes = docs.SelectNodes(query).OfType<XmlNode>().ToArray();
XmlNodeList nodeList = docs.SelectNodes(query);
for (int i = 0; i < nodes.Count(); i++)
{
//do something
//jump to method to do something else
string testPayment = Externals.Next(nodes[i]);
}
public static string Next(XMLNode currNode)
{
var next = currNode.SelectSingleNode(@"following::classifications/classification[@classification='Humor'and @category ='1'] /ancestor::PName/@title");
// This gives me the title `Bairstow`
// Now I need to select the title of the previous node e.g.John Bair
var previous = next.SelectSingleNode(@"preceding::classifications/classification[@classification='paymenttype'and @category ='CreditCard']/ancestor::event");
// this is not pointing to the node with title JohnBair
}
c# xpath
Just select undercurrNode
, notnext
.
– montonero
yesterday
no that doesn't work. I need to jump from the next to the previous. because I have already moved out from the currNode by doing a search in next. Now my aim is to move back from the next
– user726720
yesterday
It's not quite so.currNode
is not modified when you do SelectSingleNode. You can do any number of selections from this one node and it still be there.
– montonero
yesterday
I have tried this already and when I do a preceding it goes back to node[0]. It seems like when I callExternals.Next(nodes[i])
, it only exposes node[I] to the methodNext
. And not all nodes. That's why when I do preceding it goes back to node[0].
– user726720
yesterday
I tried also a.PreviousSibling
. It returns me to the same node[0].
– user726720
yesterday
|
show 2 more comments
I have following XML:
XML
<PatientDetailsXML>
<PList>
<PName type="Patient"> // node [i] = 0
<properties>
<Room bedType="Auto" />
<PName title="Joe Beom" PId="1234">
<Details>
<classification classification="paymenttype" category="Wallet" />
<classification classification="Humor" category="1" />
<classification classification="Food" category="Fruit" />
</Details>
</PName>
</properties>
<childEvents>
</childEvents>
</PName>
<PName type="Patient"> // node[i] =1
<properties>
<Room bedType="Auto" />
<PName title="John Bair" PId="4567">
<Details>
<classification classification="paymenttype" category="Wallet" />
<classification classification="Humor" category="2" />
<classification classification="Food" category="Fruit" />
</Details>
</PName>
</properties>
<childEvents>
</childEvents>
</PName>
<PName type="Patient"> // node[i] = 2
<properties>
<Room bedType="Auto" />
<PName title="Bairstow" PId="1234">
<Details>
<classification classification="paymenttype" category="CreditCard" />
<classification classification="Humor" category="1" />
<classification classification="Food" category="Vegetables" />
</Details>
</PName>
</properties>
<childEvents>
</childEvents>
</PName>
When I'm at node[0]
, i'm doing a search for classification='paymenttype'
and category ='CreditCard'
, I find the 3rd item node[i] = 2
var next = currNode.SelectSingleNode(@"following::classifications/classification[@classification='paymenttype'and @category ='CreditCard'] /ancestor::PName/@title"); // This gives me the title `Bairstow`
Now I need to jump to my previous node where classification='paymenttype'and @category ='CreditCard'
.
var previous = next.SelectSingleNode(@"preceding::classifications/classification[@classification='paymenttype'and @category ='CreditCard']/ancestor::event");
// this doesn't seem to work
CODE
var query = @"//PList/PName[.//PName/classifications/classification[@classification='paymenttype' and @category='Wallet']]";
var nodes = docs.SelectNodes(query).OfType<XmlNode>().ToArray();
XmlNodeList nodeList = docs.SelectNodes(query);
for (int i = 0; i < nodes.Count(); i++)
{
//do something
//jump to method to do something else
string testPayment = Externals.Next(nodes[i]);
}
public static string Next(XMLNode currNode)
{
var next = currNode.SelectSingleNode(@"following::classifications/classification[@classification='Humor'and @category ='1'] /ancestor::PName/@title");
// This gives me the title `Bairstow`
// Now I need to select the title of the previous node e.g.John Bair
var previous = next.SelectSingleNode(@"preceding::classifications/classification[@classification='paymenttype'and @category ='CreditCard']/ancestor::event");
// this is not pointing to the node with title JohnBair
}
c# xpath
I have following XML:
XML
<PatientDetailsXML>
<PList>
<PName type="Patient"> // node [i] = 0
<properties>
<Room bedType="Auto" />
<PName title="Joe Beom" PId="1234">
<Details>
<classification classification="paymenttype" category="Wallet" />
<classification classification="Humor" category="1" />
<classification classification="Food" category="Fruit" />
</Details>
</PName>
</properties>
<childEvents>
</childEvents>
</PName>
<PName type="Patient"> // node[i] =1
<properties>
<Room bedType="Auto" />
<PName title="John Bair" PId="4567">
<Details>
<classification classification="paymenttype" category="Wallet" />
<classification classification="Humor" category="2" />
<classification classification="Food" category="Fruit" />
</Details>
</PName>
</properties>
<childEvents>
</childEvents>
</PName>
<PName type="Patient"> // node[i] = 2
<properties>
<Room bedType="Auto" />
<PName title="Bairstow" PId="1234">
<Details>
<classification classification="paymenttype" category="CreditCard" />
<classification classification="Humor" category="1" />
<classification classification="Food" category="Vegetables" />
</Details>
</PName>
</properties>
<childEvents>
</childEvents>
</PName>
When I'm at node[0]
, i'm doing a search for classification='paymenttype'
and category ='CreditCard'
, I find the 3rd item node[i] = 2
var next = currNode.SelectSingleNode(@"following::classifications/classification[@classification='paymenttype'and @category ='CreditCard'] /ancestor::PName/@title"); // This gives me the title `Bairstow`
Now I need to jump to my previous node where classification='paymenttype'and @category ='CreditCard'
.
var previous = next.SelectSingleNode(@"preceding::classifications/classification[@classification='paymenttype'and @category ='CreditCard']/ancestor::event");
// this doesn't seem to work
CODE
var query = @"//PList/PName[.//PName/classifications/classification[@classification='paymenttype' and @category='Wallet']]";
var nodes = docs.SelectNodes(query).OfType<XmlNode>().ToArray();
XmlNodeList nodeList = docs.SelectNodes(query);
for (int i = 0; i < nodes.Count(); i++)
{
//do something
//jump to method to do something else
string testPayment = Externals.Next(nodes[i]);
}
public static string Next(XMLNode currNode)
{
var next = currNode.SelectSingleNode(@"following::classifications/classification[@classification='Humor'and @category ='1'] /ancestor::PName/@title");
// This gives me the title `Bairstow`
// Now I need to select the title of the previous node e.g.John Bair
var previous = next.SelectSingleNode(@"preceding::classifications/classification[@classification='paymenttype'and @category ='CreditCard']/ancestor::event");
// this is not pointing to the node with title JohnBair
}
c# xpath
c# xpath
asked yesterday
user726720
41821039
41821039
Just select undercurrNode
, notnext
.
– montonero
yesterday
no that doesn't work. I need to jump from the next to the previous. because I have already moved out from the currNode by doing a search in next. Now my aim is to move back from the next
– user726720
yesterday
It's not quite so.currNode
is not modified when you do SelectSingleNode. You can do any number of selections from this one node and it still be there.
– montonero
yesterday
I have tried this already and when I do a preceding it goes back to node[0]. It seems like when I callExternals.Next(nodes[i])
, it only exposes node[I] to the methodNext
. And not all nodes. That's why when I do preceding it goes back to node[0].
– user726720
yesterday
I tried also a.PreviousSibling
. It returns me to the same node[0].
– user726720
yesterday
|
show 2 more comments
Just select undercurrNode
, notnext
.
– montonero
yesterday
no that doesn't work. I need to jump from the next to the previous. because I have already moved out from the currNode by doing a search in next. Now my aim is to move back from the next
– user726720
yesterday
It's not quite so.currNode
is not modified when you do SelectSingleNode. You can do any number of selections from this one node and it still be there.
– montonero
yesterday
I have tried this already and when I do a preceding it goes back to node[0]. It seems like when I callExternals.Next(nodes[i])
, it only exposes node[I] to the methodNext
. And not all nodes. That's why when I do preceding it goes back to node[0].
– user726720
yesterday
I tried also a.PreviousSibling
. It returns me to the same node[0].
– user726720
yesterday
Just select under
currNode
, not next
.– montonero
yesterday
Just select under
currNode
, not next
.– montonero
yesterday
no that doesn't work. I need to jump from the next to the previous. because I have already moved out from the currNode by doing a search in next. Now my aim is to move back from the next
– user726720
yesterday
no that doesn't work. I need to jump from the next to the previous. because I have already moved out from the currNode by doing a search in next. Now my aim is to move back from the next
– user726720
yesterday
It's not quite so.
currNode
is not modified when you do SelectSingleNode. You can do any number of selections from this one node and it still be there.– montonero
yesterday
It's not quite so.
currNode
is not modified when you do SelectSingleNode. You can do any number of selections from this one node and it still be there.– montonero
yesterday
I have tried this already and when I do a preceding it goes back to node[0]. It seems like when I call
Externals.Next(nodes[i])
, it only exposes node[I] to the method Next
. And not all nodes. That's why when I do preceding it goes back to node[0].– user726720
yesterday
I have tried this already and when I do a preceding it goes back to node[0]. It seems like when I call
Externals.Next(nodes[i])
, it only exposes node[I] to the method Next
. And not all nodes. That's why when I do preceding it goes back to node[0].– user726720
yesterday
I tried also a
.PreviousSibling
. It returns me to the same node[0].– user726720
yesterday
I tried also a
.PreviousSibling
. It returns me to the same node[0].– user726720
yesterday
|
show 2 more comments
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53944288%2fxpath-preceding-node%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53944288%2fxpath-preceding-node%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Just select under
currNode
, notnext
.– montonero
yesterday
no that doesn't work. I need to jump from the next to the previous. because I have already moved out from the currNode by doing a search in next. Now my aim is to move back from the next
– user726720
yesterday
It's not quite so.
currNode
is not modified when you do SelectSingleNode. You can do any number of selections from this one node and it still be there.– montonero
yesterday
I have tried this already and when I do a preceding it goes back to node[0]. It seems like when I call
Externals.Next(nodes[i])
, it only exposes node[I] to the methodNext
. And not all nodes. That's why when I do preceding it goes back to node[0].– user726720
yesterday
I tried also a
.PreviousSibling
. It returns me to the same node[0].– user726720
yesterday