我有一个很大的XML文档。如下所示:
<AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=]]>
<StreamsetInfoRecord>
<StreamsetName>
http://localhost/abc/abc08.osdinfra.net-88/abc/abc.partner/shares/abcAdmin/jobRepository/cooked/jobFileExts/2018/10/09/JobMetaData_20181009.ss
</StreamsetName>
<StreamsetInfoList>
<StreamsetInfo
StreamId="859e1a91-bb17-46f6-94f4-79d67c1f7e83"
abcName="abc://abc08-dorp-co3c/vol61/system/jobRepository/cooked/jobFileExts/2018/10/09/JobMetaData_20181009.ss"
VcName="http://localhost/abc/abc08.osdinfra.net-88/abc/abc.partner/shares/abcAdmin/jobRepository/cooked/jobFileExts/2018/10/09/JobMetaData_20181009.ss"
Length="16132378830"
Count="3002"
CreationTime="10/10/2018 3:53:36 AM"
ExpirationTime="4/8/2019 3:53:36 AM"
ModificationTime="10/10/2018 3:12:02 AM" />
</StreamsetInfoList>
</StreamsetInfoRecord>
现在从该文档中,我只想检索其中包含单词Length =的标签。即从上面的示例代码段中,我想检索以下信息:
StreamsetInfo
StreamId="859e1a91-bb17-46f6-94f4-79d67c1f7e83"
abcName="abc://abc08-dorp-co3c/vol61/system/jobRepository/cooked/jobFileExts/2018/10/09/JobMetaData_20181009.ss"
VcName="http://localhost/abc/abc08.osdinfra.net-88/abc/abc.partner/shares/abcAdmin/jobRepository/cooked/jobFileExts/2018/10/09/JobMetaData_20181009.ss"
Length="16132378830"
Count="3002"
CreationTime="10/10/2018 3:53:36 AM"
ExpirationTime="4/8/2019 3:53:36 AM"
ModificationTime="10/10/2018 3:12:02 AM"
可以从XML中仅检索此信息。我知道我可以使用以下方法从属性中提取XML节点:
XmlNodeList xnList = xml.SelectNodes("...")
但是在上面的SelectNode中,我需要指定确切的XPath表达式。但是,在我的文档中,我只知道我感兴趣的标记包含名称为“ Length”的属性,但我不知道其确切的XML路径。
是否可以在C#中使用XML进行这种正则表达式搜索
答案 0 :(得分:1)
尝试一下:
XmlNodeList xnList = xml.SelectNodes("//StreamsetInfo[@Length]")
答案 1 :(得分:0)
您可以使用xml linq轻松完成此操作:
using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XDocument doc = XDocument.Load(FILENAME);
List<XElement> lengthElements = doc.Descendants("StreamsetInfo").Where(x => x.Attribute("Length") != null).ToList();
var results = lengthElements.Select(x => new {
streamId = (string)x.Attribute("StreamId"),
abcName = (string)x.Attribute("abcName"),
vcName = (string)x.Attribute("VcName"),
length = (long)x.Attribute("Length"),
count = (int)x.Attribute("Count"),
creationTime = (DateTime)x.Attribute("CreationTime"),
expirationTime = (DateTime)x.Attribute("ExpirationTime"),
modificationTime = (DateTime)x.Attribute("ModificationTime")
}).ToList();
}
}
}