[英]How to read a specific XML node?
我有一個XML文件,其中的數據對應於多個對象。 我正在嘗試打開XML文件,循環查找特定的文件名並讀取與此相關的所有值。
問題:
XMLElement的名稱和文件名之間永遠不會匹配。 因此,“我匹配當前打開的文件的名稱”永遠不會被打印。
我想發生的事情:因此,當用戶在OpenFileDialog中打開“ dog.jpg”時,XML文檔就會被加載,並且應該能夠找到值為dog.jpg的XML元素“ Name”並進行打印“我匹配當前打開的文件的名稱”。
另外,我想知道一旦獲得匹配(例如不同的距離值)后如何讀取其他對應的值?
我的Open方法中的代碼:
string fileName = openFileDialog1.FileName; //file name of a JPEG file opened by a user
XmlDocument doc = new XmlDocument();
doc.Load(@"C:\Users\Desktop\TangramsTool\patterndata.xml");
XmlNodeList nodeList = doc.SelectNodes("/Patterns/Pattern");
foreach (XmlNode node in nodeList)
{
string text = node["Name"].InnerText; //or loop through its children as well
if (text.Equals(fileName))
{
Console.WriteLine("I match the currently open file's name: " + text);
}
else
{
Console.WriteLine("This node's name is : " + text);
}
}
我的XML文件:
<Patterns>
<Pattern>
<Name>dog.jpg</Name>
<PatternDistancesList>
<PatternDistance>278</PatternDistance>
<PatternDistance>380</PatternDistance>
</PatternDistancesList>
<Pattern/>
<Pattern>
<Name>cat.jpg</Name>
<PatternDistancesList>
<PatternDistance>278</PatternDistance>
<PatternDistance>380</PatternDistance>
</PatternDistancesList>
<Pattern/>
</Patterns>
openFileDialog1.FileName返回文件的完整路徑,使用openFileDialog1.SafeFileName僅獲取文件名,您將獲得所需的結果。 字符串不算術,因為其中一個獲取文件名,而另一個獲取完整路徑。 使用openFileDialog1.SafeFileName,我相信你會得到一個匹配。
嘗試使用Linq遵循以下方式。 答案還包括您的以下查詢。
另外,我想知道一旦獲得匹配(例如不同的距離值)后如何讀取其他對應的值?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string uploadFilename = "dog.jpg";
XDocument xdoc = XDocument.Load(@"C:\Users\admin\XMLFile1.xml");
//// check if the xml file is having node mathcing upload filename name
List<XElement> xel = xdoc.Descendants("Name").Where(x => x.Value == uploadFilename).ToList();
if (xel.Any())
{
Console.WriteLine("I match the currently open file's name: " + uploadFilename);
//// Get list of element list's Ancestors
//// will return
////<Name>dog.jpg</Name>
////<PatternDistancesList>
//// <PatternDistance>278</PatternDistance>
//// <PatternDistance>380</PatternDistance>
////</PatternDistancesList>
//// looop through it
foreach (XElement item in xel.Ancestors("Pattern").Elements().ToList())
{
}
//// OR get another list
List<XElement> foundItems = xel.Ancestors("Pattern").Elements().ToList();
}
}
}
}
這是使用控制台應用程序的基本幫助。 相應地修改代碼。 希望能幫助到你。 :)
從文件對話框獲取文件名:
string fileName = openFileDialog1.SafeFileName;
加載XmlDocument:
XDocument xdoc = XDocument.Load(@"C:\Users\Desktop\TangramsTool\patterndata.xml");
獲取匹配的XElements:
var MatchingPatterns=xdoc.Elements("Pattern").Where(o=>o.Element(Name).Value.Trim()==filename).FirstOrDefault();
if(MatchingPatterns!=null)
{
Console.WriteLine("I match the currently open file's name: " + fileName );
}
您可以像這樣獲得PatternDistance的列表:
List<XElement> patternDistances= MatchingPatterns.Element("PatternDistancesList").Elements("PatternDistance").ToList();
這可能有幫助!
<Patterns>
<Pattern>
<Name>dog.jpg</Name>
<PatternDistancesList>
<PatternDistance>278</PatternDistance>
<PatternDistance>380</PatternDistance>
</PatternDistancesList>
</Pattern>
<Pattern>
<Name>cat.jpg</Name>
<PatternDistancesList>
<PatternDistance>278</PatternDistance>
<PatternDistance>380</PatternDistance>
</PatternDistancesList>
</Pattern>
</Patterns>
string fileName = openFileDialog1.SafeFileName;
確保文件名和節點[“名稱”] .InnerText相同
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.