任何人都可以帮忙吗?
我正在尝试使用 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 文件”,其中包含有关大量文档的元数据。至少,这是我所要求的。我收到的“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) 我想读取一个 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 时,我会很高兴。
我正在寻找一个.NET库,它可以从无效的HTML代码生成一个干净的Xml树,理想情况下是System.Xml.XmlDocument.IE应该做出最好的努力猜测,修复和替换浏览器遇到这种情况,并生成假装XmlDocument.图书馆也应该得到很好的维护.:)
我意识到这很多(太多了?)要问,我会很感激任何有用的线索.似乎有相当多的Java实现,但我宁愿不生成自己的绑定.到目前为止,我已经找到了http://www.majestic12.co.uk/projects/html_parser.php和http://users.rcn.com/creitzel/tidy.html#dotnet,以及http:// sourceforge .net/projects/tidyfornet.
我还没有构建或测试任何这些,但从(稀疏)文档和罕见的更新,他们似乎没有他们有我正在寻找的东西.那么你有什么建议,要么是这些选择,要么是你过去的经验.
我们看到使用XmlDocument的.NET Web应用程序中的内存使用率非常高.一个小的(~5MB)XML文档被加载到XmlDocument对象中并存储在HttpContext.Cache中,以便在每个页面加载时轻松查询和进行XSLT转换.XML会定期在磁盘上进行修改,因此缓存依赖于该文件.
这样的应用程序似乎使用了数百兆字节的RAM.
我已经尝试过在每个请求启动时请求垃圾收集,这使RAM的使用率保持在较低水平,但我无法想象这是一个好习惯.
有没有人对如何实现相同目标但RAM使用率较低有任何建议?
嗨,我想复制一个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) 我试图弄清楚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)
这不起作用.
我正在尝试下载网页并解析它.我需要到达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#中.)
我们有一些使用某个命名空间的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) (注意:原始问题标题是:从带有文档规范的字符串加载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后解析字节数组.