Ответ 1
Попробуйте это. Не знаете, зачем вам нужен второй документ.
foreach (XElement xe in doc.Descendants("Profile"))
{
MessageBox.Show(xe.Element("username").Value);
}
Я пытаюсь выполнить итерацию через мои узлы документа xml, чтобы получить значение для <username>Ed</username>
в каждом node. Я использую Linq, чтобы сначала отсортировать XDocument, а затем попытаться выполнить петлю через узлы. Кажется, я не могу найти правильный цикл foreach, чтобы достичь этого. Любая помощь приветствуется.
var doc = XDocument.Load("files\\config.xml");
var newDoc = new XDocument(new XElement("Config",
from p in doc.Element("Config").Elements("Profile")
orderby int.Parse(p.Element("order").Value)
select p));
foreach (XElement xe in newDoc.Nodes())
{
MessageBox.Show(xe.Element("username").Value);
}
// XML document
<Config>
<Profile>
<id>Scope</id>
<username>Scope 1</username>
<password>...</password>
<cdkey>0000</cdkey>
<expkey></expkey>
<cdkeyowner>Scope</cdkeyowner>
<client>W2BN</client>
<server>[IP]</server>
<homechannel>Lobby</homechannel>
<load>1</load>
<order>2</order>
</Profile>
<Profile>
<id>Scope 2</id>
<username>Scope 2</username>
<password>...</password>
<cdkey>0000</cdkey>
<expkey></expkey>
<cdkeyowner>Scope</cdkeyowner>
<client>W2BN</client>
<server>[IP]</server>
<homechannel>Lobby</homechannel>
<load>1</load>
<order>1</order>
</Profile>
</Config>
Попробуйте это. Не знаете, зачем вам нужен второй документ.
foreach (XElement xe in doc.Descendants("Profile"))
{
MessageBox.Show(xe.Element("username").Value);
}
Легче использовать XPathDocument и выражение XPath.
var doc = new XPathDocument("files\\config.xml")
foreach (var username in doc.CreateNavigator().Select("//username")
{
...
}
Если вы ищете внутренний node, то есть рекурсивный, вы можете проверить элемент с элементом. Например, предположим, что вы читаете свой xml из базы данных
string xmlRoot = "select XmlItem from db";
XDocument doc = XDocument.Parse(xmlRoot);
List<XElement> xElementList = doc.Descendants().Tolist();
foreach(XElement element in xElementList )
{
// read the element and do with your node
if(element.HasElements)
{
// here you can reach nested node
}
}