У меня есть XML, например.Получение XElement через XPathSelectElements
<?xml version="1.0" encoding="utf-8"?>
<A1>
<B2>
<C3 id="1">
<D7>
<E5 id="abc" />
</D7>
<D4 id="1">
<E5 id="abc" />
</D4>
<D4 id="2">
<E5 id="abc" />
</D4>
</C3>
</B2>
</A1>
Это может образец код:
var xDoc = XDocument.Load("Test.xml");
string xPath = "//B2/C3/D4";
//or string xPath = "//B2/C3/D4[@id='1']";
var eleList = xDoc.XPathSelectElements(xPath).ToList();
foreach (var xElement in eleList)
{
Console.WriteLine(xElement);
}
Он отлично работает, но если я добавить пространство имен в корневой узел А1, этот код не работает. При поиске решений я нашел this one, но использует метод Descendants() для запроса XML. В моем понимании, это решение потерпит неудачу, если бы я искал <E5>, поскольку тот же тег существует для <D7>, < D4 ID = "1" > и < D4 ID = "2" >
Мое требование для поиска, существует ли узел в определенном XPath. Если есть способ сделать это с помощью потомков, я был бы рад использовать его. Если нет, пожалуйста, расскажите мне, как искать, используя пространство имен.
Приносим извинения, если это дубликат.
Я пробовал это, спасибо, что работает. Это лучший способ сделать это? Я просто спрашиваю, потому что моя функция передается всем XPath как строка, и у нее нет пространства имен, как показано в переменной xPath. Я могу добавить его через замену строки, но просто интересно, есть ли другой способ сделать это? – Charlie
Пространство имен ** префикс ** не имеет значения, просто ** значение ** часть; поэтому, если вы переименуете свой префикс из 'sample' в' whatever', это будет нормально. –
Возможно, у меня что-то отсутствует, я имел в виду, что у вас есть префикс перед каждым именем элемента в переменной xPath. Я просил альтернативу этому. то есть «// sample: B2/sample: C3/sample: D4» – Charlie