我想使用 XmlDocument.Load(String) 方法从 xml 文件加载 XMLDocument,但是当我尝试使用它时出现此错误:
System.Xml.XmlException:“.”(十六进制值 0x00)是无效字符。第 2 行,位置 1。
当我尝试在 Visual Studio 中打开文件时,文件的编码为Unicode,并且 Visual Studio 自动切换为Unicode(UTF-8)。当我使用 *Unicode(UTF-8) 编码保存文件后,程序运行完美。
为什么会发生这种情况并且可以用这种方法加载 Unicode 编码的文件?
我有这个 PowerShell 脚本,用于解析 XML 文件的不同方面。因此,我想检索特定 XML 节点的值并将其保存到变量中。我想要选择的这个节点在 XML 文件中存在多次,因此我需要能够提及我想要检索的节点的具体编号。
XML 文件:
<lvl1>
<lvl2>
<lvl3>
<lvl4>test1</lvl4>
<lvl4>test2</lvl4>
<lvl4>test3</lvl4>
</lvl3>
</lvl2>
</lvl1>
Run Code Online (Sandbox Code Playgroud)
我尝试过的Powershell脚本:
[xml] $response = get-content "FilePath\Resp.xml"
[string] $Var = $response.SelectSingleNode('lvl1/lvl2/lvl3/lvl4[2]').InnerText
Run Code Online (Sandbox Code Playgroud)
[xml] $response = get-content "FilePath\Resp.xml"
$Var = $response.lvl1.lvl2.lvl3.lvl4[2].'#text'
Run Code Online (Sandbox Code Playgroud) 我有一个XML文档来处理它包含如下属性:
<action name="foo -> bar">
Run Code Online (Sandbox Code Playgroud)
如果我做一个简单的:
XmlDocument doc = new XmlDocument();
doc.Load(stInPath);
doc.Save(stOutPath);
Run Code Online (Sandbox Code Playgroud)
属性字符串是转义的:
<action name="foo -> bar">
Run Code Online (Sandbox Code Playgroud)
这是我想要阻止的事情.
你知道怎么做(除了之后在xml文件上进行整体查找和替换)?
编辑:这似乎是一种合法的行为,而且我不必担心这一点(参见Jon Skeet的回答)
这可能有点代码味道,但我看到它是一些生产代码,即在创建XML文档时使用StringBuilder而不是XmlDocument.在某些情况下,这些是一次写入操作(例如,创建文档并将其保存到磁盘),而其他人正在将构建的字符串传递给XmlDocument,以将XslTransform预先形成为返回给客户端的文档.
如此明显的问题:以这种方式做事是否有价值,是否应该根据具体情况进行,或者这是错误的做事方式?
我正在构建一个Parts应用程序,以便学习C#和WPF.我尝试使用XmlWriter添加新部件时遇到问题.我可以创建xml文件,但无法确定如何添加其他部分.我应该使用像XmlDocument这样的东西吗?这是我的代码背后:
private void btnSave_Click(object sender, RoutedEventArgs e)
{
XmlWriterSettings settings = new XmlWriterSettings();
settings.Encoding = Encoding.UTF8;
settings.Indent = true;
using (XmlWriter writer = XmlWriter.Create("f:\\MyParts.xml", settings))
{
writer.WriteStartDocument();
writer.WriteStartElement("MyParts");
writer.WriteStartElement("parts");
writer.WriteStartElement("item");
writer.WriteString(txtbxitem.Text);
writer.WriteEndElement();
writer.WriteStartElement("color");
writer.WriteString(txtbxcolor.Text);
writer.WriteEndElement();
writer.WriteStartElement("size");
writer.WriteString(txtbxsize.Text);
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndDocument();
writer.Flush();
writer.Close();
}
}
Run Code Online (Sandbox Code Playgroud)
此代码正确创建xml文件和节点,但如何添加其他部分?这是我想要创建的:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<MyParts>
<parts>
<item>Part1</item>
<color>Red</color>
<size>SM</size>
</parts>
<parts>
<item>Part2</item>
<color>Blue</color>
<size>XXL</size>
</parts>
</MyParts>
Run Code Online (Sandbox Code Playgroud) 我有字符串,它包含从PHP文件返回的xml节点.就像是
<a>1</a><b>0</b><c>4</c>..............
Run Code Online (Sandbox Code Playgroud)
现在我需要找出每个节点有什么值,即a,b,c ......在将此字符串加载到xmlDocument时,我得到的错误就像"有多个根元素".
任何解决方案
我编写了一个C#应用程序,它加载XML文件,解析它们并使用这些信息来运行SQL查询并将结果发送到电子邮件分发列表.
这些XML文件通常由END用户创建.
目前我让他们替换>和<with>和<在SQL中,当然是他们有时忘记的END用户.事实上,他们总是忘记.我更喜欢将查询保存在XML文件中.那么,有没有办法强制/允许在XML文件中使用这些特殊字符?
现在我的用户必须输入:
<?xml version="1.0" encoding="utf-8" ?>
<report>
<queries>
<query>
SELECT * FROM THETABLE WHERE THEVALUE > 100
</query>
</queries>
</report>
Run Code Online (Sandbox Code Playgroud)
我希望他们能够输入:
<?xml version="1.0" encoding="utf-8" ?>
<report>
<queries>
<query>
SELECT * FROM THETABLE WHERE THEVALUE > 100
</query>
</queries>
</report>
Run Code Online (Sandbox Code Playgroud) 这是XML字符串的信息.
<?xml version="1.0" encoding="UTF-8"?>
<string xmlns="http://tempuri.org/">
<statusInfo><vendorClaimID>BRADY12478018AETNA</vendorClaimID>
<statusID>0</statusID><statusDescription>Unvalidated</statusDescription>
</statusInfo></string>
Run Code Online (Sandbox Code Playgroud)
但这就是它的来源..你必须向右滚动才能看到它.
'<?xml version="1.0" encoding="utf-8"?>'#$D#$A'<string xmlns="http://tempuri.org/"><statusInfo><vendorClaimID>BRADY12478018AETNA</vendorClaimID><statusID>0</statusID><statusDescription>Unvalidated</statusDescription></statusInfo></string>'
Run Code Online (Sandbox Code Playgroud)
我已将字符串加载到XMLDoc中,但不知道如何从这里轻松访问值.
var
doc: IXMLDocument;
doc := LoadXMLData(xmlString);
Run Code Online (Sandbox Code Playgroud)
谢谢!
假设我有一个带有转义&符号的xml.然后我如何阅读它,以便结果给我"未转义"文本.
运行以下内容会给我"&" 作为结果.我如何找回'&'
void Main()
{
var xml = @"
<a>
&
</a>
";
var doc = new XmlDocument();
doc.LoadXml(xml);
var ele = (XmlElement)doc.FirstChild;
Console.WriteLine (ele.InnerXml);
}
Run Code Online (Sandbox Code Playgroud) 我有一个XML文件,例如
<Bars1>
<Bar name='0'>245</Bar>
<Bar name='1'>180</Bar>
<Bar name='2'>120</Bar>
<Bar name='3'>60</Bar>
<Bar name='4'>0</Bar>
</Bars1>
<Bars2>
<Bar name='0'>25</Bar>
<Bar name='1'>10</Bar>
<Bar name='2'>10</Bar>
<Bar name='3'>6</Bar>
<Bar name='4'>0</Bar>
</Bars2>
<Gubbins3>
<Bar name='0'>45</Bar>
<Bar name='1'>18</Bar>
<Bar name='2'>12</Bar>
<Bar name='3'>4</Bar>
<Bar name='4'>0</Bar>
</Gubbins3>
Run Code Online (Sandbox Code Playgroud)
和一个List<int>notNeededBarNames,包含例如{1,3}
我已经将XML文件加载到XmlDocumentxmlDoc中,并且想要删除任何"Bar"元素,其中属性"name"是我列表中的整数之一,无论它在XML中可能存在于何处.我的例子很小,但实际上文档和列表可能非常大.
这样做有一个很好的方法吗?我可以"蛮力"它,但我不禁觉得可能有更好的方法.
希望你能帮忙!
xmldocument ×10
c# ×7
xml ×7
xpath ×2
.net ×1
delphi ×1
delphi-2009 ×1
encoding ×1
php ×1
powershell ×1
xmlnode ×1
xmlwriter ×1