[英]To get the values of innertag of a particular type in a string or variable using XmlDocument
在下面的xml中,
<?xml version="1.0" encoding="utf-8"?>
<Models>
<Model DESC="HONDA-BLUE-450" MODELID="XX12-01" Status="in" />
<Model DESC="VOLKS--RED-345" MODELID="XY12-01" Status="in" />
<Model DESC="BENZ-BLUE-550" MODELID="XX12-01" Status="in" />
<Model DESC="VOLKS--CYAN-345" MODELID="BG12-01" Status="out" />
<Model DESC="HONDA-GREEN-234" MODELID="AX12-01" Status="in" />
<Model DESC="VOLKS-Yellow-765" MODELID="XY11-01" Status="in" />
<Model DESC="HONDA-GREEN-109" MODELID="AC12-01" Status="in" />
<Model DESC="AUDI-GREEN-984" MODELID="AF42-01" Status="in" />
<Model DESC="VOLKS-Yellow-565" MODELID="XJ11-61" Status="out" />
<Model DESC="HONDA-WHITE-079" MODELID="DC12-38" Status="in" />
<Model DESC="TOYOTA-GREY-109" MODELID="UC12-81" Status="in" />
<Model DESC="AUDI-CYAN-984" MODELID="LF42-41" Status="in" />
<Model DESC="VOLKS-WHITE-865" MODELID="LK11-61" Status="out" />
<Model DESC="HONDA-GREY-039" MODELID="PC12-31" Status="in" />
</Models>
我想獲取所有狀態為MODELID且DESC以VOLKS開頭的值。 任何幫助,將不勝感激。
您可以使用linq到xml來遍歷xml節點和String.StartsWith
來檢查屬性DESC
值是否以“ VOLKS”開頭:
XDocument xdoc = XDocument.Load("data.xml");
var modelIds= from c in xdoc.Descendants("Model")
where c.Attribute("DESC").Value.StartsWith("VOLKS") &&
c.Attribute("Status").Value == "out"
select c.Attribute("MODELID").Value;
或者使用正則表達式來具有SQL LIKE
:
XDocument xdoc = XDocument.Load("data.xml"));
var modelIds= from c in xdoc.Descendants("Model")
where c.Attribute("DESC").Value.Like("VOLKS%") &&
c.Attribute("Status").Value == "out"
select c.Attribute("MODELID").Value;
對LIKE使用正則表達式:
public static class MyStringExtensions
{
public static bool Like(this string toSearch, string toFind)
{
return new Regex(@"\A" + new Regex(@"\.|\$|\^|\{|\[|\(|\||\)|\*|\+|\?|\\").Replace(toFind, ch = > @"\" + ch).Replace('_', '.').Replace(" % ", ".*") + @"\
z ", RegexOptions.Singleline).IsMatch(toSearch);
}
}
您沒有提到LINQ是否還可以。 這是使用LINQ,foreach和XPATH的方法。 (以增強Mihai已發布的報道)。
static void Main(string[] args)
{
XmlDocument xd = new XmlDocument();
xd.Load("Models.xml");
var result = from XmlNode row in xd.DocumentElement.SelectNodes("//Model[starts-with(@DESC, 'VOLKS') and @Status='out']") where row != null select row;
foreach (var x in result)
{
XmlAttributeCollection attributes = x.Attributes;
Console.Write("<Model ");
foreach (XmlAttribute attribute in x.Attributes)
{
Console.Write("{0}=\"{1}\" ", attribute.Name, attribute.Value);
}
Console.WriteLine(" />");
}
}
帶有lambda的Linq to XML解決方案:
var query = XDocument.Load("data.xml").Root.Elements("Model")
.Where(m => m.Attribute("Status").Value == "out" && m.Attribute("DESC").Value.StartsWith("VOLKS"))
.Select(m => m.Attribute("MODELID").Value);
foreach (var v in query)
Console.WriteLine(v);
// output:
// BG12-01
// XJ11-61
// LK11-61
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.