我希望这是有道理的.我有以下XML文档.
<PrinterDirectory>
<Country Name="UK>
<Region Name="Aberdeen" />
<Region Name="Birmingham" />
<Region Name="London" />
</Country>
<Country Name="France">
<Region Name="Paris" />
<Region Name="Bordeaux" />
</Country>
</PrinterDirectory>
Run Code Online (Sandbox Code Playgroud)
例如,用于检索英国地区的LINQ是什么?
我试过了
varRegionQuery = from items in xdoc.Descendants("Country")
where items.Attribute("Name").Value == "UK"
select new
{
_Region = items.Element("Region").Attribute("Name").Value
};
Run Code Online (Sandbox Code Playgroud)
然而,这只能找回"阿伯丁".
<Automobiles>
<Cars>
<YearofMfr></YearofMfr>
<Mileage></Mileage>
<MeterReading></MeterReading>
<Color></Color>
<Condition></Condition>
</Cars>
<Cars>
<YearofMfr></YearofMfr>
<Color></Color>
<Condition></Condition>
</Cars>
</Automobiles>
Run Code Online (Sandbox Code Playgroud)
如何获得包含所有子元素的元素.详细解释.我有上面的xml.从这里我想要检索具有所有子节点的单个节点.如果您在第二个节点中看到某些信息丢失.我试过这样做.
var nodes = from nodeElements in doc.Descendants().FirstOrDefault().Elements()
where doc.Descendants().Count()==5
select nodeElements;
Run Code Online (Sandbox Code Playgroud)
我需要一个节点作为输出,它有5个子元素.
<Cars>
<YearofMfr></YearofMfr>
<Mileage></Mileage>
<MeterReading></MeterReading>
<Color></Color>
<Condition></Condition>
</Cars>
Run Code Online (Sandbox Code Playgroud) 这不是作业; 我的单元测试需要这个.
样本输入:<rows><row><a>1234</a><b>Hello</b>...</row><row>...</rows>.
样本输出:<rows><row><a>0.0</a><b>0.0</b>...</row><row>...</rows>.
您可以假设文档以该文档开头,<rows>并且该父节点具有名为的子节点<row>.你不知道的节点的名称a,b等等.
额外的功劳:如何使用任意格式良好的"自由格式"XML来完成这项工作?
我用正则表达式尝试了这个:)没有运气.我可以说它"在右边不贪心",但不在左边.谢谢你的帮助.
编辑:这是我尝试过的:
private static string ReplaceValuesWithZeroes(string gridXml)
{
Assert.IsTrue(gridXml.StartsWith("<row>"), "Xml representation must start with '<row>'.");
Assert.IsTrue(gridXml.EndsWith("</row>"), "Xml representation must end with '<row>'.");
gridXml = "<deleteme>" + gridXml.Trim() + "</deleteme>"; // Fake parent.
var xmlDoc = XDocument.Parse(gridXml);
var descendants = xmlDoc.Root.Descendants("row");
int rowCount = descendants.Count();
for (int rowNumber = 0; rowNumber < rowCount; rowNumber++)
{
var row = descendants.ElementAt(0);
Assert.AreEqual<string>(row.Value /* Does …Run Code Online (Sandbox Code Playgroud) 我试图将以下XML文件解析为列表.不幸的是,它只返回一个元素
示例XML
<Titles>
<Book Title ="Love Story" Author= "Erich Segal" Year = "1999"/>
<Book Title ="Code Complete" Author= "Steve McConnel" Year = "2004"/>
<Book Title ="Rework" Author = "Jaso Fried" Year = "2010"/>
<Book Title ="Delivering Happiness" Author= "Tony Hseigh" Year = "2011"/>
</Titles>
Run Code Online (Sandbox Code Playgroud)
C#代码
public class BookInfo
{
public string Title { get; set; }
public string Author { get; set; }
public int Year { get; set; }
}
XDocument xmlDoc = XDocument.Load(strXMLPath);
var b = from device …Run Code Online (Sandbox Code Playgroud) 在我们的生产代码中,我看到使用显式XName.Get调用读取XML属性:
var name = element.Attribute (XName.Get ("name"));
Run Code Online (Sandbox Code Playgroud)
我曾经总是将一个字符串传递给Attribute:
var name = element.Attribute ("name");
Run Code Online (Sandbox Code Playgroud)
这更具可读性,但我想知道逻辑或性能是否有任何差异.
我正在使用,像我的数据库gestor一样使用Access,但我意识到它在我的应用程序中速度很慢(我不知道问题是Access还是数据).
但我在想是否可以将数据库更改为XML文件.你怎么看?
我想从XML文件中删除所有文本节点(但不是任何其他类型的节点).我怎样才能做到这一点?
示例输入:
<root>
<slideshow id="1">
<Image>hii</Image>
<ImageContent>this</ImageContent>
<Thumbnail>is</Thumbnail>
<ThumbnailContent>A</ThumbnailContent>
</slideshow>
<slideshow id="2">
<Image>hii</Image>
<ImageContent>this</ImageContent>
<Thumbnail>is</Thumbnail>
<ThumbnailContent>B</ThumbnailContent>
</slideshow>
</root>
Run Code Online (Sandbox Code Playgroud)
预期产出:
<root>
<slideshow id="1">
<Image></Image>
<ImageContent></ImageContent>
<Thumbnail></Thumbnail>
<ThumbnailContent></ThumbnailContent>
</slideshow>
<slideshow id="2">
<Image></Image>
<ImageContent></ImageContent>
<Thumbnail></Thumbnail>
<ThumbnailContent></ThumbnailContent>
</slideshow>
</root>
Run Code Online (Sandbox Code Playgroud) 我正在使用sharePoint Lists webservice,为了在搜索页面中加载下拉列表,我需要从XML中提取所有"ows_Country"名称,在格式为:的XMLNode中返回:
<rs:data ItemCount="1" xmlns:rs="urn:schemas-microsoft-com:rowset">
<z:row ows_Title="Nike" ows_ID="1" ows_Country="Spain" xmlns:z="#RowsetSchema" />
<z:row ows_Title="Addidas" ows_ID="4" ows_Country="Brazil" xmlns:z="#RowsetSchema" />
<z:row ows_Title="Puma" ows_ID="5" ows_Country="Spain" xmlns:z="#RowsetSchema" />
</rs:data>
Run Code Online (Sandbox Code Playgroud)
我需要使用LINQ从XMLNode获取不同的"ows_Country",请帮助可能是我第一次使用LINQ以及XML.
我最近开始使用Linq,我目前正在尝试使用它来解析严重嵌套的XML文件(我无法控制).但是,在尝试运行以下语句时,我得到"对象引用未设置为对象的实例"错误.
问题出在"城市"一栏.城市房产的数据来自xml结构前景/ contactinfo/City/Answer.
但由于该字段不是强制性的,因此有时XML不具有城市/答案节点.所以我得到错误,因为"city"节点不存在,我正试图在其上调用".Element()".我找到了很多解决这个问题的方法,当它只有一个节点级别下来时(即如果我需要的数据是在城市中,而城市是唯一缺少的节点).
但是当它降低两级时(即试图得到一个不存在的节点的子节点),我一直无法找到任何解决方案.
希望这个问题足够明确.
最好的问候,莫滕
var prospects = (from prospect in xdoc.Descendants("PROSPECT")
select new Prospect {
ProspectID = (string) prospect.Element("PROSPECTINFO").Element("PROSPECT_ID"),
Name = (string) prospect.Element("PERSONALINFO").Element("FIRSTNAME")+ " " + prospect.Element("PERSONALINFO").Element("SURNAME"),
address = (string) prospect.Element("CONTACTINFO").Element("ADDRESSLINE1").Element("ANSWER"),
zipCode = (string)prospect.Element("CONTACTINFO").Element("POSTALCODE").Element("ANSWER").Value,
City = (string) prospect.Element("CONTACTINFO").Element("CITY").Element("ANSWER"),
}).ToList();
Run Code Online (Sandbox Code Playgroud) 让我们考虑以下xml文档:
<contact>
<name>Hines</name>
<phone>206-555-0144</phone>
<mobile>425-555-0145</mobile>
</contact>
Run Code Online (Sandbox Code Playgroud)
我从中检索一个值
var value = parent.Element("name").Value;
Run Code Online (Sandbox Code Playgroud)
上面的代码将抛出NullReferenceExceptionif"name"不存在,因为Element将在C#中返回null,但在vb.net中不会返回空值.
所以我的问题是确定何时缺少根节点下的xml节点并获取空值.