xmldocument 相关问题

表示XML文档的原始.NET类型。更现代的版本是XDocument。

XDocument - 将打开和关闭标签转换为自关闭标签

注意:这不是语义问题。这并不是询问自闭合标签的含义。这是关于使用 XDocument 执行与本示例文章中使用 C# 提到的相反的操作: 一个 重新...

回答 1 投票 0

GetElementsByTagName 不区分大小写?

我正在使用 GetElementsByTagName 从 xml 中提取元素。 GetElementsByTagName 区分大小写 - 如果节点名称是“PARAMS”而不是“Params”,则会引发异常。 我不想那样...

回答 2 投票 0

将对象的通用列表转换为 SqlXml

请不要在未通读的情况下标记为重复,因为我一直在谷歌上搜索此内容并在 stackoverflow 上搜索,但我找不到我想要的内容。 如何转换通用对象列表...

回答 2 投票 0

使用不带命名空间的 XmlDocument 读取 Xml 节点

我需要使用 vb.net 4.0 XmlDocument 解析和读取 xml,问题是 xml 没有命名空间,我有一个使用 XElement 的工作代码,但需要使用 XmlDocument 并且无法导入...

回答 1 投票 0

尝试读取xml元素中的数据

我有以下xml 我有以下 xml <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> <env:Header xmlns:env="http://www.w3.org/2003/05/soap-envelope"> <wsa:Action>http://cdr.ffiec.gov/public/services/RetrieveFacsimileResponse</wsa:Action> <wsa:MessageID>urn:uuid:f1c95072-c1ab-44f4-9c8f-59a26e28fce8</wsa:MessageID> <wsa:RelatesTo>urn:uuid:0f4a548e-39ad-4b5f-be02-ad9eaae75e32</wsa:RelatesTo> <wsa:To>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:To> <wsse:Security> <wsu:Timestamp wsu:Id="Timestamp-ee96d970-c821-455d-9f92-75085fcad001"> <wsu:Created>2024-06-10T20:27:43Z</wsu:Created> <wsu:Expires>2024-06-10T20:32:43Z</wsu:Expires> </wsu:Timestamp> </wsse:Security> </env:Header> <soap:Body> <RetrieveFacsimileResponse xmlns="http://cdr.ffiec.gov/public/services"> <RetrieveFacsimileResult>TestData==</RetrieveFacsimileResult> </RetrieveFacsimileResponse> </soap:Body> </soap:Envelope> 我正在尝试像这样读取RetrieveFacsimileResult中的数据。 XmlDocument MyDoc = new XmlDocument(); MyDoc.LoadXml(response.Content); XmlNode MyNode = MyDoc.SelectSingleNode("xml/soap:Envelope/soap:Body/RetrieveFacsimileResponse/RetrieveFacsimileResult"); 我需要 Namespace Manager 或 XsltContext。该查询有前缀、变量或用户定义的函数。 如何读取RetrieveFacsimileResult里面的数据?? 请尝试以下使用 LINQ to XML API 的解决方案。自 2007 年以来,它在 .Net Framework 中可用。 显然,需要考虑默认命名空间。 c# void Main() { XDocument xdoc = XDocument.Parse(@"<soap:Envelope xmlns:soap='http://www.w3.org/2003/05/soap-envelope' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:wsa='http://schemas.xmlsoap.org/ws/2004/08/addressing' xmlns:wsse='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd' xmlns:wsu='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd'> <env:Header xmlns:env='http://www.w3.org/2003/05/soap-envelope'> <wsa:Action>http://cdr.ffiec.gov/public/services/RetrieveFacsimileResponse</wsa:Action> <wsa:MessageID>urn:uuid:f1c95072-c1ab-44f4-9c8f-59a26e28fce8</wsa:MessageID> <wsa:RelatesTo>urn:uuid:0f4a548e-39ad-4b5f-be02-ad9eaae75e32</wsa:RelatesTo> <wsa:To>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:To> <wsse:Security> <wsu:Timestamp wsu:Id='Timestamp-ee96d970-c821-455d-9f92-75085fcad001'> <wsu:Created>2024-06-10T20:27:43Z</wsu:Created> <wsu:Expires>2024-06-10T20:32:43Z</wsu:Expires> </wsu:Timestamp> </wsse:Security> </env:Header> <soap:Body> <RetrieveFacsimileResponse xmlns='http://cdr.ffiec.gov/public/services'> <RetrieveFacsimileResult>TestData==</RetrieveFacsimileResult> </RetrieveFacsimileResponse> </soap:Body> </soap:Envelope>"); XNamespace ns = "http://cdr.ffiec.gov/public/services"; var RetrieveFacsimileResult = xdoc.Descendants(ns + "RetrieveFacsimileResult")? .SingleOrDefault()?.Value; }

回答 1 投票 0

.Net Core XmlDocument 不返回声明

我有一个带有 XmlDocument 的 .net core Web 应用程序,即使没有修改,它也不会返回声明。 我有这个代码 [http邮报] [消耗(“应用程序/xml”)] [产生(“应用程序...

回答 3 投票 0

选择子字符串的多个节点的 xpath 具有无效标记

xml 文档在注释节点中包含注释,如下所示: 09/28/2021 22:21:31user1 [1] 文件已上传 09/28/2021 22:22:47user2 [2] ...

回答 1 投票 0

设置InnerXml时如何更改或继承默认命名空间

设置具有默认命名空间的 XmlElement 的 InnerXml 时,所有没有显式命名空间的标记都会被解析为具有 xmlns="",而不是继承该 XmlElement 的 de...

回答 1 投票 0

使用 C# 在现有文档中插入 XML 字符串会破坏一切

我使用 C# 和 System.Xml 类来操作现有的 XML 文档。 特别是,我需要将字符串形式的 XML 片段插入文档中的特定节点内。 为了...

回答 1 投票 0

XML - 如何获取单个节点而不是整个文档中的子节点?

一直在寻找答案,但找不到任何东西 - 我很新,所以也许我没有找到正确的关键词? 这是我正在使用的 XML 示例 一直在寻找答案,但找不到任何东西 - 我很新,所以也许我没有找到正确的关键词? 这是我正在使用的 XML 示例 <database> <book> <title>A</title> <author> <name>1</name> </author> </book> <book> <title>B</title> <author> <name>2</name> </author> <author> <name>3</name> </author> <author> <name>4</name> </author> <author> <name>5</name> </author> </book> </database> 我正在尝试使用 C# XmlDocument 获取书 A 作者 1,然后获取书 B 作者 2、3、4、5 到目前为止,我正在使用的代码正在循环遍历所有作者,因此我得到了书 A 作者 1, 2, 3, 4, 5 我目前的代码大致如下 XmlDocument doc = new XmlDocument(); doc.Load("myxmlfile"); XmlNode root = doc.SelectSingleNode("database"); XmlNodeList nodelist = root.SelectNodes("book"); foreach (XmlNode n in nodelist) { XmlNodeList authors = root.SelectNodes(".//author"); book.authorstring = ""; foreach (XmlNode author in authors) { book.authorstring = book.authorstring+author.SelectSingleNode("name").InnerText + ", "; } } 我读到了一些内容,如果我在“//”之前使用“.”,它将“锚定”到当前节点,但它似乎不起作用并且正在循环所有节点 我做错了什么或遗漏了什么? 如果我理解正确,你的错误就在这一行: XmlNodeList authors = root.SelectNodes(".//author"); 应该是 XmlNodeList authors = n.SelectNodes(".//author"); 对于未来的读者,我看到这篇文章,但我忘记在我的 xPath 中添加 .。 即(这是 powershell,但这并不重要), 这是错误的,返回了从根节点找到的第一个节点: $descriptionNode = $someNode.SelectSingleNode("//Description") 这是正确的,并返回第一个节点作为该节点的子节点: $descriptionNode = $someNode.SelectSingleNode(".//Description") 这当然是因为//会在任何地方查询,而./会相对查询。 解释得很清楚,但是很容易错过,而且花了一些时间才找到。 方便的备忘单: https://devhints.io/xpath 使用linq2XML..使用起来很简单 XElement doc=XElement.Load("yourXML.xml"); var lstBooks=doc.Descendants("book").Select(x=> new { name=x.Element("title").Value, authors=x.Elements("author").Select(y=>y.Element("name").Value) } ); lstBooks现在包含所有必需的数据 您现在可以这样做 foreach(var book in lstBooks) { book.name;//Name of the book foreach(var author in book) { author;//name of the author } }

回答 3 投票 0

如何使用c#循环遍历xml文档节点以使用xpath存储值

我正在尝试循环下面的 xml 文档 16 我正在尝试循环下面的 xml 文档 <proposer driverId="1"> <conviction convictionId="1"> <code>16</code> </conviction> <conviction convictionId="2"> <code>10</code> </conviction> </proposer> <driver driverId="2"> <conviction convictionId="3"> <code>22</code> </conviction> </driver> 我的想法是获取所有信念代码,无论是提议者还是驱动程序,并将其存储在字符串列表中,然后通过发送索引,我执行 elementAtDefault 来获取代码 DrivingConvictionCode1 = GetConvictionCode(1, risk), DrivingConvictionCode2 = GetConvictionCode(2, risk), DrivingConvictionCode3 = GetConvictionCode(3, risk), 在 GetConvictionCode 方法中,我将索引值与 XmlDoc 一起传递,并调用 GetConvictions 方法,然后执行 Elementatdefault 以基于索引获取 ConvictionCode private string GetConvictionCode(int convictionSrNo, XmlDocument risk) { var convictions = GetConvictions(risk); return convictions.ElementAtOrDefault(convictionSrNo - 1) == null ? string.Empty : convictions[convictionSrNo - 1]; } private List<string> GetConvictions(XmlDocument risk) { var convictions = new List<string>(); foreach (XmlNode selectNode in risk.SelectNodes("/risk/proposer/conviction")) { convictions.AddRange(new[] {selectNode.SelectSingleNode("/risk/proposer/conviction/code").InnerText}); } foreach (XmlNode selectNode in risk.SelectNodes("/risk/driver/conviction")) { convictions.AddRange(new[] {selectNode.SelectSingleNode("/risk/driver/conviction/code").InnerText}); } return convictions; } 我在这里面临的问题是在循环中下一个信念值正在被旧的值取代,所以如果第一次循环它是 16 下一次它应该是 10 但它来了 16。任何人都可以帮忙或告诉我任何其他方式 我期望的输出是 DrivingConvictionCode1 = GetConvictionCode(1, risk) > 16, DrivingConvictionCode2 = GetConvictionCode(2, risk) > 10, DrivingConvictionCode3 = GetConvictionCode(3, risk) > 22, 您应该使用 InnerText 而不是 .SelectSingleNode("<path>").InnerText 来获取值。 foreach (XmlNode selectNode in risk.SelectNodes("/risk/proposer/conviction")) { convictions.AddRange(new[] { selectNode.InnerText }); } foreach (XmlNode selectNode in risk.SelectNodes("/risk/driver/conviction")) { convictions.AddRange(new[] { selectNode.InnerText }); }

回答 1 投票 0

如何将 XML 反序列化为 C# 对象而忽略 xmlns?

给定以下 XML,我如何将它们反序列化为同一个 C# 对象?版本 1.1 本质上向后兼容 1.0,所以我并不真正关心 xmlns 值,但 C# 不这么认为...

回答 1 投票 0

UnauthorizedAccessException:访问路径被拒绝

当尝试加载 xml 文档进行解析时,我不断收到以下错误: System.Private.Xml.dll 中发生“System.UnauthorizedAccessException”类型的异常,但...

回答 1 投票 0

如何让XMLDocument不在自闭合标签上放置空格?

我有一个格式良好、没有任何空格的 XML。一定是这样的。 当我将其加载到 XMLDocument 进行签名时,自闭合标签会获得额外的空白,并且 变成: ...

回答 4 投票 0

'xi'是设置新XmlDocumentFragment的InnerXml时未声明的前缀

我正在尝试向现有 xml 文件添加新节点。该文件定义了 xi 命名空间: 我正在尝试向现有 xml 文件添加新节点。该文件定义了 xi 命名空间: <Module xmlns:xi="http://www.w3.org/2001/XInclude" ... 并且包含节点: <xi:include href="somefile.xml" /> 这加载得很好,我可以在现有节点上进行操作,但是如果我尝试像这样添加新节点: XmlDocumentFragment frag = doc.CreateDocumentFragment(); frag.InnerXml = "<SomeNode SomeAttribute=\"\">" + " <xi:include href=\"SomeFile.xml\" />" + "</SomeNode>"; 我收到“'xi'是未声明的前缀”的 XmlException 我认为片段本身无法识别名称空间是不高兴的,但我没有看到任何直观的方法来解决这个问题。 当我写这个问题时,我有一个可行的想法,并将其发布,以防它对其他人有帮助。我决定在将片段添加到文档后添加有问题的 xml: XmlDocumentFragment frag = doc.CreateDocumentFragment(); frag.InnerXml = "<SomeNode SomeAttribute=\"\">" + "</SomeNode>"; XmlNode newNode = parentNode.AppendChild(frag); newNode.InnerXml = "<xi:include href=\"SomeFile.xml\" />"; 如果有人有更干净的方法来做到这一点。我很想听听它是什么。 在 <xi:include href="somefile.xml" /> 中,xi 是命名空间前缀。 如果使用命名空间前缀,则必须声明。您必须在使用命名空间前缀 xi 的元素之上或之上添加其声明: xmlns:xi="http://www.w3.org/2001/XInclude" 如果您通过以某种方式组装片段来暂时设法避开错误消息,请意识到最终结果才是重要的:如果使用了命名空间但未声明,您仍然会遇到问题。 我想在这里发布一个详细的例子。 下面的代码展示了如何使用 C# 将文本 sinppet 附加到 OneNote 桌面。 你可能知道,OneNote 中的内容存储为 xml,每个节点的前缀为 one。 因此名称空间xmlns:one设置在输入部分的第一行。 xmlns:one=""http://schemas.microsoft.com/office/onenote/2013/onenote"" using System; using System.Xml; using System.Xml.Linq; using Append2OneNote; using Microsoft.Office.Interop.OneNote; class Program { static void Main() { Microsoft.Office.Interop.OneNote.Application onenoteApp = new Microsoft.Office.Interop.OneNote.Application(); string pageId = "{3ACAE6C6-53C5-0C4F-060D-3007A1428E63}{1}{E19561840189956234832620129833010512773022001}"; onenoteApp.GetPageContent(pageId, out var CurrentPageXml); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(CurrentPageXml); XmlNode root = xmlDoc.DocumentElement; var LastOutline = root.LastChild; var LastOEChildren = LastOutline.LastChild; var LastOE = LastOEChildren.LastChild; var pageContent = "Your text content1"; string newXML = $@" <one:OE alignment=""left"" quickStyleIndex=""1"" selected=""partial"" xmlns:one=""http://schemas.microsoft.com/office/onenote/2013/onenote""> <one:T selected=""all""><![CDATA[{pageContent}]]></one:T> </one:OE>"; XmlDocumentFragment xfrag = xmlDoc.CreateDocumentFragment(); xfrag.InnerXml = newXML; LastOEChildren.AppendChild(xfrag); onenoteApp.UpdatePageContent(xmlDoc.InnerXml); } }

回答 3 投票 0

在生产环境(64 GB RAM)中生成非常大的 XML 文档时出现 OutOfMemory 错误 - 在具有 16 GB RAM 的计算机上进行开发时工作正常

我有一个 Web 应用程序,经典 ASP.NET,在具有 64 GB RAM 和 SQL Server 2017 Standard 的 Windwes Server SBE 2016 上运行。 该应用程序是在 VS 2022 最新版本中构建的。 我需要生成一个非常大的 XML,以便...

回答 1 投票 0

XML 在没有 xpath 的情况下读取嵌套节点

我有以下xml。 DocumentEntity=“借款人”|DataType=“表”|Value=“ ...

回答 1 投票 0

将字符串加载到 XmlDocument 后保留空行

我有这些相当大的字符串,其中包含多个换行符” “而且,在某些情况下,我什至可能会有一系列换行符” ...”。这会导致空行,

回答 1 投票 0

使用 XPath 解析 XML 文档

假设我有以下 xml(一个简单的示例) 一个 两个 ...

回答 8 投票 0

XPath 不适用于在 XML 中进行选择

我有一个 XML 文档,但我一生都无法使用 XPath 获取数据。我尝试了所有能找到的样本,但没有成功。我正在尝试提取电子邮件地址。有什么想法吗? XML: &...

回答 2 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.