标签: linq-to-xml

如何将多个命名空间声明添加到XDocument?

我正在使用XDocument在已知结构中构建Xml文档.我想要构建的结构如下:

<request xmlns:ns4="http://www.example.com/a" xmlns:ns3="http://www.example.com/b" xmlns:ns2="http://www.example.com/c" >
    <requestId>d78d4056-a831-4c7d-a357-d14402f623fc</requestId>
    ....
</request>
Run Code Online (Sandbox Code Playgroud)

请注意"xmlns:nsX"属性.

我正在尝试将这些属性添加到我的"request"元素中,但没有成功.

XNamespace ns4 = XNamespace.Get("http://www.example.com/a");
XNamespace ns3 = XNamespace.Get("http://www.example.com/b");
XNamespace ns2 = XNamespace.Get("http://www.example.com/c");

XDocument doc = new XDocument(
    new XDeclaration("1.0", "utf-8", "no"),
    new XElement("request",
        new XAttribute("ns4", ns4),
        new XAttribute("ns3", ns3),
        new XAttribute("ns2", ns2),
        new XElement("requestId", Guid.NewGuid())
     )
);
Run Code Online (Sandbox Code Playgroud)

但是,这会产生以下结果:

<request ns4="http://www.example.com/a" ns3="http://www.example.com/b" ns2="http://www.example.com/c">
  <requestId>38b07cfb-5e41-4d9a-97c8-4740c0432f11</requestId>
</request>
Run Code Online (Sandbox Code Playgroud)

如何正确添加命名空间声明?

c# xml linq-to-xml

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

如何从XElement创建的节点中删除空xmlns属性

这是我的代码:

XElement itemsElement = new XElement("Items", string.Empty);
//some code
parentElement.Add(itemsElement);
Run Code Online (Sandbox Code Playgroud)

之后我得到了这个:

<Items xmlns=""></Items>
Run Code Online (Sandbox Code Playgroud)

父元素没有任何名称空间.我该怎么做才能获得Items没有空命名空间属性的元素?

.net c# xml linq-to-xml

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

为什么Xdocument给我一个utf16声明?

我正在创建一个这样的XDocument:

XDocument doc = new XDocument(
new XDeclaration("1.0", "utf-8", "yes"));
Run Code Online (Sandbox Code Playgroud)

当我像这样(doc.Save(@"c:\tijd\file2.xml");)保存文档时,我得到这个:

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

没关系.

但我想将内容作为xml返回,我发现以下代码:

 var wr = new StringWriter(); 
            doc.Save(wr); 
            string s = (wr.GetStringBuilder().ToString());
Run Code Online (Sandbox Code Playgroud)

这段代码有效,但字符串'''以这个开头:

<?xml version="1.0" encoding="utf-16" standalone="yes"?>
Run Code Online (Sandbox Code Playgroud)

所以它从utf8变为utf16,这不是我想要的,因为现在我无法在Internet Explorer中阅读它.

有没有办法防止这种行为?

c# linq-to-xml

30
推荐指数
1
解决办法
6259
查看次数

获取xelement属性值

我有一个看起来像这样的XElement:

<User ID="11" Name="Juan Diaz" LoginName="DN1\jdiaz" xmlns="http://schemas.microsoft.com/sharepoint/soap/directory/" />
Run Code Online (Sandbox Code Playgroud)

如何使用XML提取LoginName属性的值?我尝试了以下,但q2"枚举没有产生任何结果".

var q2 = from node in el.Descendants("User")
    let loginName = node.Attribute(ns + "LoginName")
    select new { LoginName = (loginName != null) };
foreach (var node in q2)
{
    Console.WriteLine("LoginName={0}", node.LoginName);
}
Run Code Online (Sandbox Code Playgroud)

c# xml xelement linq-to-xml

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

在这里获取XElement的行号

XDocument xdoc = XDocument.Load(file);
IEnumerable<XElement> categories = xdoc.Descendants("Category");
foreach (XElement category in categories)
{
    //get line number for element here...
}
Run Code Online (Sandbox Code Playgroud)

.net c# xml linq-to-xml

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

如何获取XDocument对象中的属性

我有这个xml

<config>
    <audio first="true" second="false" third="true" />
</config>
Run Code Online (Sandbox Code Playgroud)

我希望我的代码能够做到这样的事情

if (xdoc.getAttr("first")=="true")
    Console.Write("first is true");
Run Code Online (Sandbox Code Playgroud)

如何使用LINQ XDocument执行此操作?到目前为止我所拥有的是用该xml字符串加载的XDocument对象.

c# xml linq linq-to-xml

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

C#Linq to XML检查元素是否存在

我有一个XML文档如下:

<Database>
 <SMS>
   <Number>"+447528349828"</Number> 
   <Date>"09/06/24</Date> 
   <Time>13:35:01"</Time> 
   <Message>"Stop"</Message> 
 </SMS>
 <SMS>
   <Number>"+447528349828"</Number> 
   <Date>"09/06/24</Date> 
   <Time>13:35:01"</Time> 
   <Message>"Stop"</Message> 
 </SMS>
</Database>
Run Code Online (Sandbox Code Playgroud)

我正在尝试检查文档中是否存在父SMS节点的number子节点(出于验证目的,以避免插入重复数据).

关于潜在解决方案的任何建议?

编辑:元素将与输入字符串进行比较.例如if(inputNumber == xmlDocNumber){//不插入新元素}

c# xml linq linq-to-xml

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

使用XDocument按属性查找元素

此查询似乎有效,但我有0结果.

IEnumerable<XElement> users =
            (from el in XMLDoc.Elements("Users")
             where (string)el.Attribute("GUID") == userGUID.ToString()
             select el);
Run Code Online (Sandbox Code Playgroud)

我的XML如下:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Users>
  <User GUID="68327fe2-d6f0-403b-a7b6-51860fbf0b2f">
    <Key ID="F7000012ECEAD101">
      ...
    </Key>
  </User>

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

你有什么线索可以解释这个问题吗?

c# xml linq linq-to-xml

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

如何将XmlNode转换为XElement?

我有一个旧XmlNode的代码.但解决当前任务的最简单方法是使用XElementLINQ-to-XML.唯一的问题是在.NET Framework中没有直接或明显的方法将a转换XmlNode为a XElement.

所以对于初学者,我想实现一个接收XmlNode实例并将其转换为XElement实例的方法.

我该如何实现这种转换?

.net c# linq linq-to-xml

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

如何使用"路径"查询XDocument?

我想查询XDocument给定路径的对象,(例如"/ path/to/element/I/want")但我不知道如何继续.

c# xml linq xpath linq-to-xml

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

标签 统计

c# ×10

linq-to-xml ×10

xml ×8

linq ×5

.net ×3

xelement ×1

xpath ×1