我正在使用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)
如何正确添加命名空间声明?
这是我的代码:
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没有空命名空间属性的元素?
我正在创建一个这样的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中阅读它.
有没有办法防止这种行为?
我有一个看起来像这样的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) 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) 我有这个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对象.
我有一个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){//不插入新元素}
此查询似乎有效,但我有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)
你有什么线索可以解释这个问题吗?
我有一个旧XmlNode的代码.但解决当前任务的最简单方法是使用XElementLINQ-to-XML.唯一的问题是在.NET Framework中没有直接或明显的方法将a转换XmlNode为a XElement.
所以对于初学者,我想实现一个接收XmlNode实例并将其转换为XElement实例的方法.
我该如何实现这种转换?
我想查询XDocument给定路径的对象,(例如"/ path/to/element/I/want")但我不知道如何继续.