标签: xmldocument

如何在Excel vba中创建CDATA标签?

任何人都可以帮忙吗?

我正在尝试使用 vba 将 Excel 数据转换为 xml 文件。我的 xml 文件看起来像这样,

 <product>
  <info><i>Samsung</i></info>
 </product>
Run Code Online (Sandbox Code Playgroud)

我希望不解析 html 标签。因此尝试使用 vba 中的 createCDATASection 方法在 vba 中添加 cdata

我添加了这样的vba代码

  Set objDom = New DOMDocument
  Set objXMLRootelement = objDom.createElement("Product")
  Set objXMLelement = objDom.createElement("info")
  objXMLRootelement.appendChild objXMLelement
  cdata=objDom.createCDATASection ("<i>Samsung</i>")
  objXMLelement.text=cdata.text
Run Code Online (Sandbox Code Playgroud)

我希望我的 xml 文件看起来像这样,当在记事本中查看视图源时,它应该将
“<”显示为“<”,而不是“<”

  <product>
    <info><![CDATA[<i>Samsung</i>]]></info>
  </product>
Run Code Online (Sandbox Code Playgroud)

执行我的代码后,它显示如下,

  <product>
   <info><i>Samsung</i></info>
  </product>
Run Code Online (Sandbox Code Playgroud)

但是cdata标签没有出现。不知道原因。并且当在记事本中查看xml文件的源时,“<”符号显示为&符号lt;

有人可以解决这个问题吗?

提前致谢

xml excel vba xmldocument cdata

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

读取 XmlTextReader 对象中的“假”xml 文档(xml 片段)

[案例] 我收到了一堆“xml 文件”,其中包含有关大量文档的元数据。至少,这是我所要求的。我收到的“xml 文件”没有根元素,它们的结构如下(我遗漏了一堆元素):

<folder name = "abc"></folder>
<folder name = "abc/def">
<document name = "ghi1">
</document>
<document name = "ghi2">
</document>
</folder>
Run Code Online (Sandbox Code Playgroud)

[问题] 当我尝试读取 XmlTextReader 对象中的文件时,它无法告诉我没有根元素。

[当前解决方法] 当然,我可以将文件作为流读取,附加 < xmlroot> 和 </ xmlroot> 并将流写入新文件并在 XmlTextReader 中读取该文件。这正是我现在正在做的,但我不想“篡改”原始数据。

[请求的解决方案] 我知道我应该使用 XmlTextReader 来实现此目的,并带有 DocumentFragment 选项。但是,这会产生编译时错误:

System.Xml.dll 中发生“System.Xml.XmlException”类型的未处理异常

附加信息:部分内容解析不支持 XmlNodeType DocumentFragment。第 1 行,位置 1。

[错误代码]

using System.Diagnostics;
using System.Xml;

namespace XmlExample
{
    class Program
    {
        static void Main(string[] args)
        {
            string file = @"C:\test.txt";
            XmlTextReader tr = new XmlTextReader(file, XmlNodeType.DocumentFragment, null);
            while(tr.Read())
                Debug.WriteLine("NodeType: …
Run Code Online (Sandbox Code Playgroud)

c# xml xmldocument

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

如何读取xml字符串忽略标题?

我想读取一个 xml 字符串而忽略标题和注释。

忽略评论很简单,我在这里找到了解决方案。但我没有找到任何解决方案来忽略标题。

让我举个例子吧:

考虑这个xml:

<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Some comments -->
<Tag Attribute="3">
    ...
</Tag>
Run Code Online (Sandbox Code Playgroud)

我想将 xml 读取到一个字符串中,只获取元素“标签”和其他元素,但没有“xml 版本”和注释。

元素“标签”只是一个例子。可能存在许多其他人。

所以,我只想要这个:

<Tag Attribute="3">
    ...
</Tag>
Run Code Online (Sandbox Code Playgroud)

我到目前为止的代码:

<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Some comments -->
<Tag Attribute="3">
    ...
</Tag>
Run Code Online (Sandbox Code Playgroud)

我没有在 XmlReaderSettings 上找到任何东西来做到这一点。

我是否需要逐个节点地选择我想要的节点?这个设置不存在?

编辑 1: 只是为了恢复我的问题。我需要在 WebService 的 CDATA 中使用 xml 的内容。当我发送评论或 xml 版本时,我收到了 xml 部分的特定错误。所以我假设当我阅读没有版本、标题和评论的 xml 时,我会很高兴。

c# xml xmldocument xmlreader

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

库从HTML标签汤生成.NET XmlDocument

我正在寻找一个.NET库,它可以从无效的HTML代码生成一个干净的Xml树,理想情况下是System.Xml.XmlDocument.IE应该做出最好的努力猜测,修复和替换浏览器遇到这种情况,并生成假装XmlDocument.图书馆也应该得到很好的维护.:)

我意识到这很多(太多了?)要问,我会很感激任何有用的线索.似乎有相当多的Java实现,但我宁愿不生成自己的绑定.到目前为止,我已经找到了http://www.majestic12.co.uk/projects/html_parser.phphttp://users.rcn.com/creitzel/tidy.html#dotnet,以及http:// sourceforge .net/projects/tidyfornet.

我还没有构建或测试任何这些,但从(稀疏)文档和罕见的更新,他们似乎没有他们有我正在寻找的东西.那么你有什么建议,要么是这些选择,要么是你过去的经验.

.net clr xmldocument html-parsing html-agility-pack

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

XmlDocument缓存内存使用情况

我们看到使用XmlDocument的.NET Web应用程序中的内存使用率非常高.一个小的(~5MB)XML文档被加载到XmlDocument对象中并存储在HttpContext.Cache中,以便在每个页面加载时轻松查询和进行XSLT转换.XML会定期在磁盘上进行修改,因此缓存依赖于该文件.

这样的应用程序似乎使用了数百兆字节的RAM.

我已经尝试过在每个请求启动时请求垃圾收集,这使RAM的使用率保持在较低水平,但我无法想象这是一个好习惯.

有没有人对如何实现相同目标但RAM使用率较低有任何建议?

.net xml xmldocument caching

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

通过在特定位置插入新元素来复制xml文件 - C#

嗨,我想复制一个xml文件,并插入一个特定的元素locaiton更多的元素; 这样做的最好和最简单的方法是什么.我可以使用xmlReader读取元素并逐个引用每个类型 - 我有一些问题,但除此之外,我认为太过分工作可以做得更好.在下面的示例中,我将xml作为默认定义,需要以相同的格式创建一个新的xml,并将新值插入到sheet1中 - 但是在现有行之后,并对sheet2执行相同操作.

<book>
   <Sheet ss:name="Sheet1">
      <Table >
      <Row >
        <Cell/>
        <Cell>
             Title Name      
        </Cell>
        <Cell >
             Title Description
         </Cell>
      </Row>
   </Sheet>
<a/>
<b/>
  <Sheet ss:name="Sheet2">
      <Table >
      <Row >
        <Cell/>
        <Cell>
             Title Name      
        </Cell>
        <Cell >
             Title Description
         </Cell>
      </Row>
   </Sheet>
</book>
Run Code Online (Sandbox Code Playgroud)

c# xml xmldocument xmlwriter xmlreader

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

C#XmlDocument.CreateDocumentType

我试图弄清楚CreateDocumentType()在C#中工作,虽然我已经找到并读取了它上面的msdn页面,但我无法让它为我工作.

我只是想在我的xml文档中创建这一行:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
Run Code Online (Sandbox Code Playgroud)

有人可以帮我解决这个问题所需的语法

编辑:代码到目前为止,htmldoc是在代码中进一步声明的xmldocument.

string dtdLink = "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";
string dtdDef = "-//W3C//DTD XHTML 1.0 Transitional//EN";

XmlDocumentType docType = htmlDoc.CreateDocumentType("html", "PUBLIC", dtdLink, dtdDef);
htmlDoc.AppendChild(docType);
Run Code Online (Sandbox Code Playgroud)

这不起作用.

c# xmldocument

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

通过C#,XmlDocument.LoadXml解析网页

我正在尝试下载网页并解析它.我需要到达html文档的每个节点.所以我使用WebClient进行下载,效果很好.然后我使用以下代码段来解析文档:

 WebClient client = new WebClient();

 Stream data = client.OpenRead("http://web.cs.hacettepe.edu.tr/~bil339/");
 StreamReader reader = new StreamReader(data);
 string xml = reader.ReadToEnd();

 data.Close();
 reader.Close();
 XmlDocument xmlDoc = new XmlDocument();
 xmlDoc.loadXml(xml);
Run Code Online (Sandbox Code Playgroud)

在最后一行,程序等待一段时间,然后崩溃.它说HTML代码有错误,这不是预期的,不应该在这里,等等.有什么建议可以解决这个问题吗?其他解析HTML代码的技术也很受欢迎(当然,在C#中.)

c# parsing xmldocument web

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

如何将默认命名空间添加到已加载的XmlDocument,以便验证"有效"

我们有一些使用某个命名空间的xml数据,但实际上并没有为它声明命名空间.我们想要对它进行验证,但是默认命名空间中的无效元素不会被捕获,因为xmlnsxml规则没有设置任何内容.在这个处理阶段,文档可能已经加载了很长时间,并且不一定是原始形式(因此命名空间管理器可能是不可能的).

<root>
   <valid />
   <notvalid />
</root>
Run Code Online (Sandbox Code Playgroud)
var xd = new XmlDocument();
xd.Load(xmlstring);
xd.Validate((sender, args) =>
{
   ...
});
Run Code Online (Sandbox Code Playgroud)

c# xml validation xmldocument xml-namespaces

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

从具有文档规范的字节数组或字符串加载XML的最佳方法是什么,从OpenDocument ODT文件中获取?

(注意:原始问题标题是:从带有文档规范的字符串加载XML的最佳方法是什么?)

我需要从XmlDocument对象中的ODT opendocument(LibreOffice)文件中获取XML内容.ODT是一个zip存档,我设法将content.xml部分作为字节数组.转换为字符串似乎很简单,但我很惊讶地发现XmlDocument.LoadXml(string)不接受以Xml文档规范行开头的字符串,如:

<?xml version="1.0" encoding="UTF-8"?>
<Offices id="0" enabled="false">
  <office />
</Offices>
Run Code Online (Sandbox Code Playgroud)

例外是: Data at the root level is invalid. Line 1, position 1

我想知道是否有一个库调用来读取这样的字符串?

现在我使用我即兴创作的这个功能,但是在处理xml文档时必须在角色级别上做一些事情是不必要的复杂:

    /// <summary>
    /// Convert an Xml document in a string, including document specification line(s),
    /// to an XmlDocument object
    /// </summary>
    /// <param name="XmlString"></param>
    /// <returns></returns>
    public static XmlDocument LoadXmlString(string XmlString)
    {
        XmlDocument XmlDoc = new XmlDocument();
        XmlDoc.LoadXml(XmlString.Substring(XmlString.LastIndexOf("?>") + 2));
        return XmlDoc;
    }
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?

注意:我之前提到过这个问题

但这解决了解析字符串的问题,使用将字符串转换为字节数组的解决方案,而我不应该解析字符串,而不是将字节数组转换为字符串开头,但只是跳过此步骤直接解压缩ODT后解析字节数组.

c# xml xmldocument odt

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