如何通过索引获取xpath以动态更新XML文件C# [英] How to get xpath with indexing to update XML file dynamically C#
本文介绍了如何通过索引获取xpath以动态更新XML文件C#的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
<?xml version =1.0encoding =UTF-8?>
< breakfast_menu>
< food>
< name> Belgian Waffles
< price> $ 5.95
< description>
两个着名的比利时华夫饼干,含有大量真正的枫糖浆
< calories> 650
< food>
< name> Strawberry Belgian Waffles
< price> $ 7.95
< description>
轻薄比利时华夫饼配草莓和生奶油
< calories> 900
< food>
< name> Berry-Berry比利时华夫饼干
< price> $ 8.95
< description>
比利时华夫饼配上各种新鲜浆果和鲜奶油
< calories> 900
我的输出
比利时华夫饼我的xPath ==breakfast_menu / food / name
草莓比利时华夫饼我的xPath ==breakfast_menu / food / name
Berry-Berry比利时华夫饼我的xPath ==breakfast_menu / food / name
但我希望输出像
Belgian Waffles my xPath == breakfast_menu / food [1] / name
Strawberry Belgian Waffles my xPath ==breakfast_menu / food [2] / name
Berry-Berry比利时华夫饼我的xPath ==breakfast_menu / food [3] / name
我尝试过:
using(XmlReader reader = XmlReader.Create(pathMain))
{
XmlNode nodeTemp;
var elements = new Stack< string>();
var pathX = string.Empty;
var pathXTemp = string.Empty;
string prevNodeType = string.Empty;
string currNodeType = string.Empty;
while(reader.Read())
{
string dg = string.Empty;
if(!reader.IsEmptyElement == true)
{
currNodeType = reader.Name.ToString();
if((reader.NodeType.ToString()==EndElement)||(prevNodeType!= currNodeType))
{
indx = 1;
}
switch(reader.NodeType)
{
case XmlNodeType.Element:
elements.Push(reader.LocalName);
addtoStackPanel(reader.Name,reader.Value,pathMain,pathX,0);
休息;
case XmlNodeType.Text:
if((reader.Value!=)&&(reader.Name!=style))
{
pathX = string.Join(/,elements.Reverse());
addtoStackPanel(reader.Name,reader.Value,pathMain,pathX,0);
// prevNodeType = reader.Name.ToString();
休息;
}
其他
{
休息;
}
case XmlNodeType.EndElement:
elements.Pop();
休息;
}
}
}
}
解决方案
< blockquote> 5.95
< description>
两个着名的比利时华夫饼干,含有大量真正的枫糖浆
< calories> 650
< food>
< name> Strawberry Belgian Waffles
< price>
7.95
< description>
轻薄比利时华夫饼配草莓和生奶油
< calories> 900
< food>
< name> Berry-Berry比利时华夫饼干
< price>
8.95
< description>
比利时华夫饼配上各种新鲜浆果和鲜奶油
< calories> 900
我的输出比利时华夫饼我的xPath ==breakfast_menu / food / name
草莓比利时华夫饼我的xPath ==breakfast_menu / food / name
Berry-Berry比利时华夫饼我的xPath ==breakfast_menu / food / name
但我希望输出像Belgian Waffles my xPath == breakfast_menu / food [1] / name
Strawberry Belgian Waffles my xPath ==breakfast_menu / food [2] / name
Berry-Berry比利时华夫饼我的xPath ==breakfast_menu / food [3] / name
我尝试过:
using(XmlReader reader = XmlReader.Create(pathMain))
{
XmlNode nodeTemp;
var elements = new Stack< string>();
var pathX = string.Empty;
var pathXTemp = string.Empty;
string prevNodeType = string.Empty;
string currNodeType = string.Empty;
while(reader.Read())
{
string dg = string.Empty;
if(!reader.IsEmptyElement == true)
{
currNodeType = reader.Name.ToString();
if((reader.NodeType.ToString()==EndElement)||(prevNodeType!= currNodeType))
{
indx = 1;
}
switch(reader.NodeType)
{
case XmlNodeType.Element:
elements.Push(reader.LocalName);
addtoStackPanel(reader.Name,reader.Value,pathMain,pathX,0);
休息;
case XmlNodeType.Text:
if((reader.Value!=)&&(reader.Name!=style))
{
pathX = string.Join(/,elements.Reverse());
addtoStackPanel(reader.Name,reader.Value,pathMain,pathX,0);
// prevNodeType = reader.Name.ToString();
休息;
}
其他
{
休息;
}
case XmlNodeType.EndElement:
elements.Pop();
休息;
}
}
}
}
<?xml version="1.0" encoding="UTF-8"?> <breakfast_menu> <food> <name>Belgian Waffles <price>$5.95 <description> Two of our famous Belgian Waffles with plenty of real maple syrup <calories>650 <food> <name>Strawberry Belgian Waffles <price>$7.95 <description> Light Belgian waffles covered with strawberries and whipped cream <calories>900 <food> <name>Berry-Berry Belgian Waffles <price>$8.95 <description> Belgian waffles covered with assorted fresh berries and whipped cream <calories>900
my output
Belgian Waffles my xPath== "breakfast_menu/food/name" Strawberry Belgian Waffles my xPath== "breakfast_menu/food/name" Berry-Berry Belgian Waffles my xPath== "breakfast_menu/food/name"
but i want output like
Belgian Waffles my xPath== "breakfast_menu/food[1]/name" Strawberry Belgian Waffles my xPath== "breakfast_menu/food[2]/name" Berry-Berry Belgian Waffles my xPath== "breakfast_menu/food[3]/name"
What I have tried:
using (XmlReader reader = XmlReader.Create(pathMain)) { XmlNode nodeTemp; var elements = new Stack<string>(); var pathX = string.Empty; var pathXTemp = string.Empty; string prevNodeType = string.Empty; string currNodeType = string.Empty; while (reader.Read()) { string dg = string.Empty; if (!reader.IsEmptyElement == true) { currNodeType = reader.Name.ToString(); if ((reader.NodeType.ToString() == "EndElement") || (prevNodeType != currNodeType)) { indx = 1; } switch (reader.NodeType) { case XmlNodeType.Element: elements.Push(reader.LocalName); addtoStackPanel(reader.Name, reader.Value, pathMain, pathX, 0); break; case XmlNodeType.Text: if ((reader.Value != "") && (reader.Name != "style")) { pathX = string.Join("/", elements.Reverse()); addtoStackPanel(reader.Name, reader.Value, pathMain, pathX, 0); //prevNodeType = reader.Name.ToString(); break; } else { break; } case XmlNodeType.EndElement: elements.Pop(); break; } } } }
解决方案
5.95 <description> Two of our famous Belgian Waffles with plenty of real maple syrup <calories>650 <food> <name>Strawberry Belgian Waffles <price>
7.95 <description> Light Belgian waffles covered with strawberries and whipped cream <calories>900 <food> <name>Berry-Berry Belgian Waffles <price>
8.95 <description> Belgian waffles covered with assorted fresh berries and whipped cream <calories>900
my outputBelgian Waffles my xPath== "breakfast_menu/food/name" Strawberry Belgian Waffles my xPath== "breakfast_menu/food/name" Berry-Berry Belgian Waffles my xPath== "breakfast_menu/food/name"
but i want output likeBelgian Waffles my xPath== "breakfast_menu/food[1]/name" Strawberry Belgian Waffles my xPath== "breakfast_menu/food[2]/name" Berry-Berry Belgian Waffles my xPath== "breakfast_menu/food[3]/name"
What I have tried:
using (XmlReader reader = XmlReader.Create(pathMain)) { XmlNode nodeTemp; var elements = new Stack<string>(); var pathX = string.Empty; var pathXTemp = string.Empty; string prevNodeType = string.Empty; string currNodeType = string.Empty; while (reader.Read()) { string dg = string.Empty; if (!reader.IsEmptyElement == true) { currNodeType = reader.Name.ToString(); if ((reader.NodeType.ToString() == "EndElement") || (prevNodeType != currNodeType)) { indx = 1; } switch (reader.NodeType) { case XmlNodeType.Element: elements.Push(reader.LocalName); addtoStackPanel(reader.Name, reader.Value, pathMain, pathX, 0); break; case XmlNodeType.Text: if ((reader.Value != "") && (reader.Name != "style")) { pathX = string.Join("/", elements.Reverse()); addtoStackPanel(reader.Name, reader.Value, pathMain, pathX, 0); //prevNodeType = reader.Name.ToString(); break; } else { break; } case XmlNodeType.EndElement: elements.Pop(); break; } } } }
这篇关于如何通过索引获取xpath以动态更新XML文件C#的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文