标签: linq-to-xml

C#,LINQ获取指定父元素的子元素

我希望这是有道理的.我有以下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)

然而,这只能找回"阿伯丁".

c# linq linq-to-xml

0
推荐指数
1
解决办法
1265
查看次数

如何计算where子句中的子XElements

<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)

xml linq xelement linq-to-xml

0
推荐指数
1
解决办法
2307
查看次数

如何使用C#(最好是LINQ)用"0.0"替换XML文档中的所有"值"?

这不是作业; 我的单元测试需要这个.

样本输入:<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)

c# regex xml replace linq-to-xml

0
推荐指数
1
解决办法
1003
查看次数

使用LINQ查询枚举Descents

我试图将以下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)

c# linq linq-to-xml c#-3.0 c#-4.0

0
推荐指数
1
解决办法
142
查看次数

el.Attribute("...")和el.Attribute(XName.Get("..."))之间有区别吗?

在我们的生产代码中,我看到使用显式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)

这更具可读性,但我想知道逻辑或性能是否有任何差异.

c# xelement linq-to-xml xattribute xname

0
推荐指数
1
解决办法
1281
查看次数

在什么情况下我应该使用XML作为数据库?

我正在使用,像我的数据库gestor一样使用Access,但我意识到它在我的应用程序中速度很慢(我不知道问题是Access还是数据).

但我在想是否可以将数据库更改为XML文件.你怎么看?

c# xml database ms-access linq-to-xml

0
推荐指数
1
解决办法
170
查看次数

从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)

c# linq-to-xml

0
推荐指数
1
解决办法
1433
查看次数

Linq to XML选择不同的值

我正在使用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.

c# xml linq linq-to-xml sharepoint-2010

0
推荐指数
1
解决办法
6397
查看次数

"尝试使用不存在的父元素获取元素时,"对象引用未设置为对象的实例"

我最近开始使用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)

c# linq linq-to-xml

0
推荐指数
1
解决办法
886
查看次数

使用带有c#.net的xelement获取null元素

让我们考虑以下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节点并获取空值.

.net c# xml xelement linq-to-xml

0
推荐指数
1
解决办法
4564
查看次数