标签: linq-to-xml

使用XDocument作为XmlSerializer.Deserialize的源?

我想调用XmlSerializer.Deserialize它来传递它XDocument.它可以采取a Stream,a XmlReader或a TextReader.

我可以生成上面的一个XDocument而不实际转储XDocument到一些中间存储,例如MemoryStream

似乎我所追求的是一个XmlReader适用于它的实现XDocument.我找不到一个.

.net linq-to-xml

36
推荐指数
3
解决办法
2万
查看次数

强制XDocument使用UTF-8编码写入String

我希望能够使用声明和UTF-8编码将XML写入String.这似乎很难完成.

我已经阅读了一些并尝试了一些流行的答案,但他们都有问题.我当前的代码正确输出为UTF-8但不保持XDocument的原始格式(即缩进/空格)!

有人可以提供一些建议吗?

XDocument xml = new XDocument(new XDeclaration("1.0", "utf-8", "yes"), xelementXML);

MemoryStream ms = new MemoryStream();
using (XmlWriter xw = new XmlTextWriter(ms, Encoding.UTF8))
{
    xml.Save(xw);
    xw.Flush();

    StreamReader sr = new StreamReader(ms);
    ms.Seek(0, SeekOrigin.Begin);

    String xmlString = sr.ReadToEnd();
}
Run Code Online (Sandbox Code Playgroud)

XML要求格式化与格式化格式相同,.ToString()

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<root>
    <node>blah</node>
</root>
Run Code Online (Sandbox Code Playgroud)

我现在看到的是

<?xml version="1.0" encoding="utf-8" standalone="yes"?><root><node>blah</node></root>
Run Code Online (Sandbox Code Playgroud)

更新 我已经设法通过添加XmlTextWriter设置让这个工作...虽然看起来非常笨重!

MemoryStream ms = new MemoryStream();
XmlWriterSettings settings = new XmlWriterSettings();
settings.Encoding = Encoding.UTF8;
settings.ConformanceLevel = ConformanceLevel.Document;
settings.Indent = true;
using (XmlWriter xw …
Run Code Online (Sandbox Code Playgroud)

c# xml utf-8 linq-to-xml

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

XDocument.Descendants没有返回后代

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <SetNationalList xmlns="http://www.lge.com/ddc">
      <nationalList>
        <portnumber>6000</portnumber>
        <slaveaddress>7000</slaveaddress>
        <flagzone>2</flagzone>
        <flagindivisual>5</flagindivisual>
        <flagdimming>3</flagdimming>
        <flagpattern>6</flagpattern>
        <flaggroup>9</flaggroup>
      </nationalList>
    </SetNationalList>
  </s:Body>
</s:Envelope>
Run Code Online (Sandbox Code Playgroud)

XDocument xdoc = XDocument.Parse(xml);
foreach (XElement element in xdoc.Descendants("nationalList"))
{
   MessageBox.Show(element.ToString());
}
Run Code Online (Sandbox Code Playgroud)

我想遍历每个节点,nationalList但它不适合我,它foreach完全跳过循环.我在这做错了什么?

.net c# xml linq-to-xml

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

用于'''' HTML中的实体

我正在修改由另一方创作的一些XHTML文件.作为这项工作的一部分,我正在通过Linq到XML进行批量编辑.

我刚刚注意到一些原始的源XHTML文件在这些文件中的文本节点中包含&quot;HTML实体.例如:

<p>Greeting: &quot;Hello, World!&quot;</p>
Run Code Online (Sandbox Code Playgroud)

而当通过XElement.ToString()恢复XHTML文本时,&quot;实体将被普通的双引号替换:

<p>Greeting: "Hello, World!"</p>
Run Code Online (Sandbox Code Playgroud)

问题:任何人都可以告诉我原作者使用&quot;实体而不是普通双引号的动机是什么?这些实体是否达到了我不完全理解的目的?或者,我怀疑他们真的没必要吗?

我确实理解&quot;在某些情况下是必要的,例如当需要在HTML属性中放置双引号时.例如:

<a href="/images/hello_world.jpg" alt="Greeting: &quot;Hello, World!&quot;">
  Greeting</a>
Run Code Online (Sandbox Code Playgroud)

html xhtml escaping linq-to-xml html-entities

35
推荐指数
4
解决办法
25万
查看次数

在使用XDocument.Load()加载文件之前,如何测试文件以查看它是否是有效的XML文件?

我正在使用以下内容在C#应用程序中加载XML文档:

XDocument xd1 = new XDocument();
xd1 = XDocument.Load(myfile);
Run Code Online (Sandbox Code Playgroud)

但在此之前,我会测试以确保文件存在:

File.Exists(myfile);
Run Code Online (Sandbox Code Playgroud)

但是......是否有一种(简单)方法在XDocument.Load()之前测试文件以确保它是一个有效的XML文件?换句话说,我的用户可能会意外地在文件浏览器中单击另一个文件并尝试加载,例如,.php文件会导致异常.

我能想到的唯一方法是将它加载到StreamWriter中并简单地对前几个字符进行文本搜索,以确保它们"

谢谢!

-Adeena

c# xml linq-to-xml

34
推荐指数
3
解决办法
4万
查看次数

如何从XDocument获取XML节点

如何使用LINQ从XDocument获取XML元素?

假设我有一个名为XMLDoc的XDocument,如下所示:

<Contacts>
       <Node>
           <ID>123</ID>
           <Name>ABC</Name>
       </Node>
       <Node>
           <ID>124</ID>
           <Name>DEF</Name>
       </Node>
</Contacts>

XElement Contacts = from xml2 in XMLDoc.Elements("Contacts").Elements("Node")
                    where xml2.Element("ID").Value == variable
                    select xml2;
Run Code Online (Sandbox Code Playgroud)

但我得到错误"对象参考不是设置....."

如何使用LINQ从XML文件中获取特定节点?我想更新该节点中的一些值?

怎么可能????

提前致谢.........

.net c# linq linq-to-xml

34
推荐指数
2
解决办法
12万
查看次数

将XElement转换为字符串

我有一个简单的XElement对象

XElement xml = new XElement("XML",
    new XElement ("TOKEN",Session["Token"]),
    new XElement("ALL_INCLUSIVE", "0"),
    new XElement("BEACH", "0"),
    new XElement("DEST_DEP", ddlDest.SelectedValue.ToString()),
    new XElement("FLEX", "0")
);
Run Code Online (Sandbox Code Playgroud)

想要将内容转储成字符串的地方.完全一样Console.Writeline(xml);,但我希望字符串中的内容.我试过各种各样的方法.xml.ToString();不会自行返回任何东西.

c# xml linq linq-to-xml

34
推荐指数
2
解决办法
6万
查看次数

如何将XPath与没有前缀的默认命名空间一起使用?

什么是XPath(在C#API中XDocument.XPathSelectElements(xpath,nsman),如果重要的话)查询此文档中的所有MyNode?

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <MyNode xmlns="lcmp" attr="true">
    <subnode />
  </MyNode>
</configuration>
Run Code Online (Sandbox Code Playgroud)
  • 我试过/configuration/MyNode这是错误的,因为它忽略了命名空间.
  • 我试过/configuration/lcmp:MyNode哪个是错的,因为lcmp是URI,而不是前缀.
  • 我试过/configuration/{lcmp}MyNode哪个失败了因为Additional information: '/configuration/{lcmp}MyNode' has an invalid token.

编辑:我不能mgr.AddNamespace("df", "lcmp");像一些回答者所建议的那样使用.这要求XML解析程序知道我计划提前使用的所有命名空间.由于这适用于任何源文件,我不知道手动添加前缀的命名空间.它似乎{my uri}是XPath语法,但微软并没有打算实现那个......是真的吗?

c# xpath linq-to-xml xml-namespaces

34
推荐指数
3
解决办法
3万
查看次数

如何在XML Document中的特定位置添加XElement

我想创建一个这样的XML文档:

Xml Doc

我想使用代码和LINQ-to-XML从头开始创建它.在加载事件的形式我写了这段代码:

private void Form9_Load(object sender, EventArgs e)
{
    doc = new XDocument(new XDeclaration("1.0", "utf-8", "yes"));
    XElement myroot = new XElement("Employees");
    doc.Add(myroot);
}
Run Code Online (Sandbox Code Playgroud)

如何向员工添加新人,如果我想在特定位置插入人员,我该怎么办?

我如何删除或更新特定的人?

c# linq linq-to-xml

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

XElement =>在运行时添加子节点

所以让我们假设这是我想要实现的:

<root>
  <name>AAAA</name>
  <last>BBBB</last>
  <children>
     <child>
        <name>XXX</name>
        <last>TTT</last>
     </child>
     <child>
        <name>OOO</name>
        <last>PPP</last>
     </child>
   </children>
</root>
Run Code Online (Sandbox Code Playgroud)

不确定使用XElement是否是最简单的方法,
但这是我到目前为止所做的:

 XElement x = new XElement("root",
                  new XElement("name", "AAA"),
                  new XElement("last", "BBB"));
Run Code Online (Sandbox Code Playgroud)

现在我必须根据我的一些数据添加"孩子".
可能有1,2,3,4 ......

所以我需要通过我的列表进行迭代以获得每个孩子

foreach (Children c in family)
{
    x.Add(new XElement("child", 
              new XElement("name", "XXX"),
              new XElement("last", "TTT")); 
} 
Run Code Online (Sandbox Code Playgroud)

问题:

这样我就会错过"CHILDREN Parent节点".如果我只是在foreach之前添加它,它将被渲染为一个封闭的节点

<children/>
Run Code Online (Sandbox Code Playgroud)

这不是我们想要的.

题:

如何将第一部分添加到父节点并添加到我的列表中?

c# xml xelement linq-to-xml

34
推荐指数
3
解决办法
5万
查看次数

标签 统计

linq-to-xml ×10

c# ×8

xml ×5

.net ×3

linq ×3

escaping ×1

html ×1

html-entities ×1

utf-8 ×1

xelement ×1

xhtml ×1

xml-namespaces ×1

xpath ×1