标签: linq-to-xml

C# 查询 XML 文档

再会,

我正在尝试查询 XML 文档并有以下查询:

XElement root = XElement.Load(@"..\..\Data.xml");
var entries = root.Descendants()
              .Where(x => x.Name.LocalName == "Entry")
              .ToList();

Console.WriteLine("There are {0} nodes...", entries.Count());
foreach (XElement v in entries)
{
    Console.WriteLine(v.Value);
}
Run Code Online (Sandbox Code Playgroud)

这段代码有效,因为它提取了正确数量的 Entry 节点。入口节点如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<Database xmlns="http://www.someurl.org/schemas">
    <InfoFromRecord>
        <BaseData>
            <Entry>
                <Date>2006-03-08</Date>XD
                <Time>09:20:00</Time>
                <EnteredBy>DNS</EnteredBy>
                <TextEntry>Record 1</TextEntry>
            </Entry>
            <Entry>
                <Date>2006-03-08</Date>
                <Time>09:33:00</Time>
                <EnteredBy>MW</EnteredBy>
                <TextEntry>Record 2</TextEntry>
            </Entry>
            <Entry>
                <Date>2006-03-08</Date>
                <Time>08:58:00</Time>
                <EnteredBy>BH</EnteredBy>
                <TextEntry>Record 3</TextEntry>
            </Entry>
        </BaseData>
    </InfoFromRecord>
</Database>
Run Code Online (Sandbox Code Playgroud)

问题是,我只想提取日期和时间,而不是所有四个字段。

c# xml linq-to-xml

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

如何用另一个 XDocument 中的元素替换一个 XDocument 中的元素?

我有一个包含许多数据项的 XDocument。

我有另一个 XDocument,其中包含非常小的数据项集合。较小文档中的数据项在较大文档中的匹配路径上具有相应的元素。

我想要做的是循环遍历较小的文档,对于我发现的每个元素,我想更新较大的文档,以便将其相应的值替换为较小文档的值。

例如,较大的文档:

<Rootelement>
  <Desktop>
    <A>
      <El1 label="original blah" />
    </A>
  </Desktop>
  <Desktop>
    <B>
      <El2 />
    </B>
  </Desktop>
  <Desktop>
    <C>
      <El3 label="I'm the label" tooltip="I'm the tooltip" />
    </C>
  </Desktop>
</Rootelement>
Run Code Online (Sandbox Code Playgroud)

较小的文档:

<Rootelement>
  <Desktop>
    <C>
      <El3 label="The NEW Label" tooltip="The NEW Tooltip" />
    </C>
  </Desktop>
</Rootelement>
Run Code Online (Sandbox Code Playgroud)

我想取出路径中的元素Rootelement/Desktop/C/El3,并将较大文档中同一路径中的元素替换为较小文档中的元素,因此大文档变为:

<Rootelement>
  <Desktop>
    <A>
      <El1 label="original blah" />
    </A>
  </Desktop>
  <Desktop>
    <B>
      <El2 />
    </B>
  </Desktop>
  <Desktop>
    <C>
      <El3 label="The NEW Label" tooltip="The NEW Tooltip" />
    </C>
  </Desktop>
</Rootelement> …
Run Code Online (Sandbox Code Playgroud)

c# xml linq-to-xml

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

在C#.NET中非常简单的XML读取

我想阅读以下XML文件:

Words.xml:

<?xml version="1.0" encoding="utf-8" ?>
<words>
  <word>Bat</word>
  <word>Dog</word>
  <word>Car</word>
</words>
Run Code Online (Sandbox Code Playgroud)

..使用XDocument.我不断收到此代码中的"非空白字符无法添加到内容"错误:

XDocument doc = new XDocument("words.xml");
foreach (XElement element in doc.Descendants("word"))
{
   Console.WriteLine(element.Value);
}
Run Code Online (Sandbox Code Playgroud)

.net c# xml linq-to-xml

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

如何嵌套此LINQ查询?

我有一个来自我正在尝试查询的Web服务的XML文档.但是,我不确定如何在嵌套在其他元素中的元素时查询XML.

这是XML文件的一部分(我没有包含所有内容,因为它是一个长文件):

<response>
    <display_location>
        <full>London, United Kingdom</full>
        <city>London</city>
        <state/>
        <state_name>United Kingdom</state_name>
        <country>UK</country>
        <country_iso3166>GB</country_iso3166>
        <zip>00000</zip>
        <magic>553</magic>
        <wmo>03772</wmo>
        <latitude>51.47999954</latitude>
        <longitude>-0.44999999</longitude>
        <elevation>24.00000000</elevation>
    </display_location>
    <observation_location>
        <full>London,</full>
        <city>London</city>
        <state/>
        <country>UK</country>
        <country_iso3166>GB</country_iso3166>
        <latitude>51.47750092</latitude>
        <longitude>-0.46138901</longitude>
        <elevation>79 ft</elevation>
    </observation_location>
Run Code Online (Sandbox Code Playgroud)

我可以一次查询"一个部分"但我正在从LINQ构造一个对象.例如:

var data = from i in weatherResponse.Descendants("display_location")
           select new Forecast
           {
               DisplayFullName = i.Element("full").Value
           };

var data = from i in weatherResponse.Descendants("observation_location")
           select new Forecast
           {
               ObservationFullName = i.Element("full").Value
           };
Run Code Online (Sandbox Code Playgroud)

我的"预测"类基本上只是充满了这样的属性:

class Forecast
{
    public string DisplayFullName { get; set; };
    public string ObservationFullName { get; set; }; …
Run Code Online (Sandbox Code Playgroud)

c# xml linq linq-to-xml

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

使用 XElement 按名称获取子元素

我有以下 xml 字符串

<Folder>
        <name></name>
        <Placemark>
            <name></name>
            <description></description>
            <styleUrl></styleUrl>
            <MultiGeometry>
                <Point>
                    <coordinates></coordinates>
                </Point>
                <LineString>
                    <coordinates></coordinates>
                    <tesselate>1</tesselate>
                </LineString>
            </MultiGeometry>
        </Placemark>
</Folder>
Run Code Online (Sandbox Code Playgroud)

使用 XElement,有没有办法从 xml 字符串中提取Point元素而不必遍历它的父节点?(多几何

c# xml linq-to-xml

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

XName x ="string"?

当我遇到它时,我忘记了铸造机制:).那么你能让我再次记住它吗?因为目前看来我不能接受.

.net c# casting linq-to-xml xname

-1
推荐指数
1
解决办法
4704
查看次数

有没有办法从XML文件中删除命名空间垃圾?

我需要从XML文件中选择一些节点(来自Silverlight XAP文件的AppNamespace.xaml,而不是它很重要),但该文件具有命名空间的东西,因此XPath不起作用.我可以浪费大部分时间试用和错误的XmlNamespaceManager的束缚和纪律噩梦,并最终得到无法容忍的脆弱代码,这些代码无法容忍输入文件中的最轻微变化(在生产代码中不是一个好主意),或者我可以使用荒谬的local-name()语法[1].

但是将XPath用作人类可读的查询语言会更方便,可以用来从任意XML文件返回指定的节点或属性值.

那么有没有办法从文件中删除线路噪音?还是我卡住了?Linq-to-XML的迷宫式是否真的是较小的邪恶?

[1]

//*[local-name() = 'Deployment']/*[local-name() = 'Deployment.Parts']/*[local-name() = 'AssemblyPart']/@*[local-name()='Name']
Run Code Online (Sandbox Code Playgroud)

更新

五年之后,除了一些想要使用更强大的东西的纤维外,我对每一种纤维都支持"迷宫般的低能"一词.

xpath namespaces linq-to-xml

-1
推荐指数
1
解决办法
750
查看次数

我必须在for循环中编写什么代码?

我需要如下输出,我该怎么做?

       name1
         title1
         title2

       name2
         title1
         title2
Run Code Online (Sandbox Code Playgroud)

在for循环中,我必须显示标题.这里我使用下面的代码,这意味着我收到以下错误:

'char' does not contain a definition for 'Attribute' and no extension method 'Attribute' accepting a first argument of type 'char' could be found (are you missing a using directive or an assembly reference

如何解决上述错误以及如何在for循环中编写条件以显示标题?

我用过这段代码:

   XmlSerializer serializer = new XmlSerializer(typeof(Notchs));
   XDocument xmlDoc = XDocument.Parse(dataInXmlFile);
   var Categories = (from Category in xmlDoc.Descendants("Category")
               select new Notch()
               {
                       name = (string)Category.Attribute("name"),
                       title =  Category.Elements("Articles").Elements("article").ToString()            
               }).ToList();
       foreach(var doc in Categories)
        {
            foreach(var sec in doc.title)
            { …
Run Code Online (Sandbox Code Playgroud)

c# linq linq-to-xml windows-phone-7

-1
推荐指数
1
解决办法
107
查看次数

C#XML提取

我的XML看起来如此:

<sensor>
<data>26.7</data>
<data>54.53</data>
<log>false</log>
</sensor>
Run Code Online (Sandbox Code Playgroud)

要检索列表中的数据字段,我使用:

List<string> list = xml.Root.Descendants("sensor").Elements("data").Select(element => element.Value).ToList();
Run Code Online (Sandbox Code Playgroud)

它运作良好.

有时XML看起来像这样(log = true):

<sensor>
<data>26.7</data>
<data>54.53</data>
<log>true</log>
</sensor>
Run Code Online (Sandbox Code Playgroud)

我想忽略这些价值观.我怎样才能做到这一点?

我试过这个:

 var lastUser = xml.Element("response").Descendants("sensor")
                   .First(u => u.Element("data") != null
                                    && u.Element("log").Value == "false");
Run Code Online (Sandbox Code Playgroud)

但我只能检索当然只有第一个值.

c# xml linq-to-xml

-1
推荐指数
1
解决办法
66
查看次数

linq to xml:如何在 C# 中获取元素中的标签值

我有以下 xml 数据。

<?xml version="1.0" encoding="utf-8" ?>
<mail>
  <id>signUpConfirmation</id>
  <subject>Activation</subject>
  <body>
Hi, You account is activated \nRegards
</body>
</mail>
Run Code Online (Sandbox Code Playgroud)

我需要<body>根据我传递的 id从标签中读取值。

这是我尝试过的

var xml = File.ReadAllText("C:\\Users\\DELL\\Documents\\Visual Studio 2012\\Projects\\Website\\Website\\Files\\Mails.xml");

var str = XElement.Parse(xml);
var result = from mail in str.Elements("mail")
             where (string)mail.Element("id") == "signUpConfirmation"
             select (string)mail.Element("body");
log.Debug("mail data:" + result.First());
Run Code Online (Sandbox Code Playgroud)

我得到错误:

序列不包含任何元素。

此外,我还想在同一个查询中访问 id 标签的值。

.net c# xml linq linq-to-xml

-1
推荐指数
1
解决办法
1404
查看次数

什么是XDocument?

我正在使用linq到xml.

在这里我们加载xml文件为XDocument.Load("filename.xml").

这是什么XDocument

c# linq-to-xml

-2
推荐指数
1
解决办法
2048
查看次数

System.Xml.XmlException:意外的XML声明.XML声明必须是第一个

我在编辑后将字符串解析为XDocument时出现此错误并保存.但任何人都可以帮我找到错误位置 - 第1行,第10475位.我怎么能得到那个位置?

System.Xml.XmlException:意外的XML声明.XML声明必须是文档中的第一个节点,并且不允许在其前面显示空白字符.第1行,第10475位.

if (storage.FileExists("APPSDATA.xml"))
{
  var reader = new StreamReader(new IsolatedStorageFileStream("APPSDATA.xml", FileMode.Open, storage));

  string xml = reader.ReadToEnd();
  var xdoc = XDocument.Parse(xml);//error here 
  reader.Close(); 
Run Code Online (Sandbox Code Playgroud)

XML很大,这是jus的一部分

<?xml version="1.0" encoding="UTF-8"?>
<Ungdungs>
  <Ungdung>
    <Name>HERE City Lens</Name>
    <Id>b0a0ac22-cf9e-45ba-8120-815450e2fd71</Id>
    <Path>/Icon/herecitylens.png</Path>
    <Version>1.0.0.0</Version>
    <Category>HERE</Category>
    <Date>Uknown</Date>
  </Ungdung>
  <Ungdung>
    <Name>HERE Transit</Name>
    <Id>adfdad16-b54a-4ec3-b11e-66bd691be4e6</Id>
    <Path>/Icon/heretransit.png</Path>
    <Version>1.0.0.0</Version>
    <Category>HERE</Category>
    <Date>Uknown</Date>
  </Ungdung>
Run Code Online (Sandbox Code Playgroud)

c# xml linq-to-xml xml-parsing windows-phone-8

-2
推荐指数
1
解决办法
1万
查看次数

Linq Sequence不包含任何元素

我有一个xdocument.

XDocument xd = new XDocument();
var xdocument = XDocument.Parse(@"<Values>
                                <Required>
                                    <DisplayItem>rbProvided</DisplayItem>
                                    <MessageId>38</MessageId>
                                </Required>
                              </Values>");
Run Code Online (Sandbox Code Playgroud)

现在,我试图检查一个元素是否存在于此,如果不是我需要添加它.这是我正在尝试的代码

if(xd.Descendants().Elements("Monkey") != null)
  { Do this }
Run Code Online (Sandbox Code Playgroud)

它一直告诉我:

 Sequence Contains No Elements
Run Code Online (Sandbox Code Playgroud)

如何正确检查现有元素?

c# linq linq-to-xml

-2
推荐指数
1
解决办法
676
查看次数