我用一个节点创建了一个基本的XmlDocument:
XmlDocument bigDoc = new XmlDocument();
bigDoc.LoadXml("<Request></Request>");
Run Code Online (Sandbox Code Playgroud)
我正在获取另一个我想在<Request>节点内插入的XmlDocument .它对我不起作用:
XmlNode requestNode = bigDoc.FirstChild;
requestNode.AppendChild(anotherXMLDocument);
Run Code Online (Sandbox Code Playgroud)
它引发了一个例外.
如何在另一个XmlDocument节点中插入XmlDocument?
我的XML文件结构如下所示:
<SalaryDetails>
<Employee>
<Name>George Dsouza</Name>
<AnnualSalary>320000</AnnualSalary>
<DaysWorked>22</DaysWorked>
</Employee>
<Employee>
<Name>Jackie Parera</Name>
<AnnualSalary>300000</AnnualSalary>
<DaysWorked>19</DaysWorked>
</Employee>
...
</SalaryDetails>
Run Code Online (Sandbox Code Playgroud)
我希望将所有数据作为员工记录放入数据库中XmlDocument.
所以我写了一个这样的循环:
XmlDocument xdcDocument = new XmlDocument();
xdcDocument.Load(@"D:\SalaryDetails.xml");
XmlElement xelRoot = xdcDocument.DocumentElement;
XmlNodeList xnlNodes = xelRoot.SelectNodes("/SalaryDetails/Employee");
foreach(XmlNode xndNode in xnlNodes)
{
//What to write here??
//My sql insert command will go here
}
Run Code Online (Sandbox Code Playgroud)
AnnualSalary并且DaysWorked是整数.
如何在C#中转换XmlDocument为a XmlNode?我需要将整个XmlDocument对象作为输入参数发送到.NET Web服务.
我有一个我从文件中读到的XMLDocument.该文件是Unicode,并且具有换行符'\n'.当我把XMLDocument写回来时,它有换行符'\ r \n'.
这是代码,非常简单:
XmlTextWriter writer = new XmlTextWriter(indexFile + ".tmp", System.Text.UnicodeEncoding.Unicode);
writer.Formatting = Formatting.Indented;
doc.WriteTo(writer);
writer.Close();
Run Code Online (Sandbox Code Playgroud)
XmlWriterSettings有一个属性NewLineChars,但是我无法在'writer'上指定settings参数,它是只读的.
我可以使用指定的XmlWriterSettings属性创建XmlWriter,但XmlWriter没有格式化属性,导致文件根本没有换行符.
所以,简而言之,我需要编写一个带有换行符'\n'和Formatting.Indented的Unicode Xml文件.思考?
我正在考虑这样的方法.如果这实际上可以这样工作,请告诉我:对于示例XML:
<Root>
<Node>
<SubEl1>abc</SubEl1>
<SubEl2>def</SubEl2>
<SubEl3>123</SubEl3>
<SubEl4>456</SubEl4>
</Node>
</Root>
Run Code Online (Sandbox Code Playgroud)
想要进入<Node>,循环检查节点/元素名称并获取它的值.像这样的东西,比如名字'SubEl1'对task1使用'abc',看到元素名称是'SubEl2'我做task2.必须检查所有子元素!
示例(不工作代码):
//looping through 'Node' children
switch(SubElName for 'Node element)
{
case : 'SubEl1'
//Do Task1 using the SubEl1's value/TextName ...
case: 'SubEl2'
//Task2 ...
...
case: default //Do default task.....
}
//end loop
Run Code Online (Sandbox Code Playgroud)
如果你能想到任何其他方法(XElement,XmlDocument,SelectNodes()等,那也将受到赞赏!
我有一个格式良好的XML,没有任何空格.它必须是那样的.
当我将它加载到XMLDocument进行签名时,自闭标签会获得额外的空白区域
<cEAN/>
Run Code Online (Sandbox Code Playgroud)
变为:
<cEAN />
Run Code Online (Sandbox Code Playgroud)
一旦签署此文档,就无法删除空白区域.
PreserveWhiteSpace属性对结果没有任何影响.
我该如何改变这种行为?
我目前有以下代码:
XPathNodeIterator theNodes = theNav.Select(theXPath.ToString());
while (theNodes.MoveNext())
{
//some attempts i though were close
//theNodes.RemoveChild(theNodes.Current.OuterXml);
//theNodes.Current.DeleteSelf();
}
Run Code Online (Sandbox Code Playgroud)
我已将xpath设置为我想要在xml中返回的内容,并且我想删除循环的所有内容.我尝试了几种删除信息的方法,但它不喜欢我的语法.我在Microsoft支持上找到了一个示例:http://support.microsoft.com/kb/317666但我想使用它而不是每个.
任何意见或问题都表示赞赏.
我正在尝试xmldocument通过不同的XML 创建对象
看下面的代码:
objNewsDoc.LoadXml(strNewsDetail); // Current XML
XmlDocument docRss = new XmlDocument(); // new Xml Object i Want to create
XmlElement news = docRss.CreateElement("news"); // creating the wrapper news node
news.AppendChild(objNewsDoc.SelectSingleNode("newsItem")); // adding the news item from old doc
Run Code Online (Sandbox Code Playgroud)
错误:要插入的节点来自不同的文档上下文
编辑1完成代码块:
try
{
XmlDocument objNewsDoc = new XmlDocument();
string strNewsXml = getNewsXml();
objNewsDoc.LoadXml(strNewsXml);
var nodeNewsList = objNewsDoc.SelectNodes("news/newsListItem");
XmlElement news = docRss.CreateElement("news");
foreach (XmlNode objNewsNode in nodeNewsList)
{
string newshref = objNewsNode.Attributes["href"].Value;
string strNewsDetail = getNewsDetailXml(newshref);
try
{ …Run Code Online (Sandbox Code Playgroud) 我有一个xmldocument,我正在加载xml.
xml看起来像这样:
<Table1>
<buyer_id>0</buyer_id>
<buyername>CompanyA</buyername>
<address1>123 Simpsons Dr.</address1>
<address2/>
<city>Springfield</city>
<state>ST</state>
<postalcode>12345</postalcode>
<eaddress/>
<phone/>
<fax/>
</Table1>
Run Code Online (Sandbox Code Playgroud)
我正在循环查看每个CompanyA条目并相应地设置innertext.我正在使用以下代码将内部文本插入符合条件的元素:
XmlDocument dom = new XmlDocument();
dom.LoadXml(xmlString);
XmlNodeList elemList = dom.GetElementByTagName("Table1");
for(int i = 0; i < elemList.Count; i++)
{
if(dom.GetElementsByTagName("buyername").Item(i).InnerText.Contains("CompanyA")
{
dom.GetElementsByTagName("address1").Item(i).InnerText = "SomeInfo";
}
}
Run Code Online (Sandbox Code Playgroud)
使用上面的代码,address1(123 Simpsons Dr.)的值将被"SomeInfo"替换.我想将"SomeInfo"插入到address2元素中,但是当我尝试使用时:
dom.GetElementsByTagName("address2").Item(i).InnerText = "SomeInfo";
Run Code Online (Sandbox Code Playgroud)
我收到一个错误.我能够将innertext插入到已经有值的任何元素中,但是当元素为空时(例如<address2/>)我不能.思考?
我使用XDocument.Validate(它似乎功能一样XmlDocument.Validate)来验证XML文档针对XSD -这工作得很好,我被告知验证错误.
但是,在ValidationEventHandler(和XmlSchemaException)中,只有一些信息似乎[可靠]公开,例如:
什么我想是获得了"失败的XPath"为验证失败(如果它是有道理的):那就是,我想获得相对于XML文档失败(而不是XML文本).
有没有办法从中获取"失败的XPath"信息XDocument.Validate?如果没有,可以通过另一种XML验证方法(如XmlValidatingReader1)获取"失败的XPath" 吗?
背景:
XML将作为数据发送到我的Web服务,并通过JSON自动转换(通过JSON.NET)到XML.因此,我开始处理XDocument数据1而不是文本,由于原始JSON数据,它没有保证顺序.REST客户端由于我不打算进入,基本上是XML表单上的HTML表单字段的包装器,服务器上的验证分为两部分 - XML模式验证和业务规则验证.
在业务规则验证中,很容易为不符合一致性的字段返回"XPath",这些字段可用于指示客户端上的失败字段.我想将此扩展到XSD模式验证,它验证基本结构验证,更重要的是,属性的基本"数据类型"和"存在".但是,由于所需的自动过程(即突出显示相应的失败字段)和源转换,原始文本消息和源行/列编号本身并不是非常有用.
以下是验证码的片段:
// Start with an XDocument object - created from JSON.NET conversion
XDocument doc = GetDocumentFromWebServiceRequest();
// Load XSD
var reader = new StringReader(EmbeddedResourceAccess.ReadResource(xsdName));
var xsd = XmlReader.Create(reader, new XmlReaderSettings());
var schemas = new XmlSchemaSet();
schemas.Add("", xsd);
// Validate
doc.Validate(schemas, (sender, args) => {
// Process validation (not parsing!) …Run Code Online (Sandbox Code Playgroud) c# ×10
xmldocument ×10
xml ×4
.net ×3
xmlnode ×2
asp.net ×1
c#-4.0 ×1
insert ×1
linq-to-xml ×1
newline ×1
selectnodes ×1
signedxml ×1
xelement ×1
xmlwriter ×1
xpath ×1