我正在从C#更新我的xml语法文件。我在节点内成功插入了子节点。我想插入带有属性的子节点。我已经这样做但格式错误。我想添加名为as的新节点及其属性名称ad,其值为out = "Karaa chee";
。****
<?xml version="1.0" encoding="utf-8"?>
<grammar xml:lang="en-US" root="top" mode="voice" tag-format="semantics/1.0"
sapi:alphabet="x-microsoft-ups"
version="1.0" xmlns="http://www.w3.org/2001/06/grammar"
xmlns:sapi="http://schemas.microsoft.com/Speech/2002/06/SRGSExtensions">
<rule id="top" scope="public">
<item>
<ruleref uri="#CityName"/>
<tag> out = "src=" + rules.latest(); </tag>
</item>
to
<item>
<ruleref uri="#CityName"/>
<tag> out += "^dst=" + rules.latest(); </tag>
</item>
</rule>
<rule id="CityName" scope="private">
<one-of>
<item>
Abbottabad
<tag>out = "Abbott aabaad";</tag>
</item>
<item>
Karachi
<tag>out = "Karaa chee";</tag>
</item>
<item>
New Item here
<tag>out = "new item pronunciation here";</tag>
</item>
</one-of>
</rule>
</grammar>
这里是我用来添加节点及其属性的C#代码
XmlElement eleItem = xmlDoc.CreateElement("item", ns);
eleItem.InnerText = item;
eleItem.SetAttribute("tag", val);
foundNode.AppendChild(eleItem);
答案 0 :(得分:1)
就像Panagiotis已经评论过的那样:
您想要的输出无效
<item>
New York
<tag>out = "Neww Yarke";</tag>
</item>
您想要的输出应如下所示:
<item>
New York
<tag out="Neww Yarke"/>
</item>
您可以使用linq to XML
执行以下操作var document = new XDocument();
var itemelement = new XElement("item",
"New York",
new Xelement("tag", new XAttribute("out", "Neww Yarke")));
答案 1 :(得分:1)
问题中给出的XML表明item元素可以包含文本和其他标记元素。请注意,示例XML中显示的标记不是您的代码尝试创建的属性,它将按以下方式编写:
<item tag="out = "Abbott aabaad";">Abbottabad</item>
您正在创建的是子元素。与元素混合的还有文本块。要创建混合文本和元素内容,您需要使用文本节点和元素节点,如下所示:
public static void Main()
{
XmlDocument doc = new XmlDocument();
var root = doc.CreateElement("grammar");
doc.AppendChild(root);
var item = doc.CreateElement("item");
var text = doc.CreateTextNode("Abbottabad");
item.AppendChild(text);
var tag = doc.CreateElement("tag");
tag.InnerText = "out = \"Abbott aabaad\";";
item.AppendChild(tag);
root.AppendChild(item);
Console.WriteLine(doc.OuterXml);
}
产生类似这样的东西:
<grammar>
<item>
Abbottabad
<tag>out = "Abbott aabaad";</tag>
</item>
</grammar>
答案 2 :(得分:1)
使用LINQ to XML,您可以这样做:
XNamespace ns = "http://www.w3.org/2001/06/grammar";
XDocument xmlDoc = XDocument.Load("xmlfile.xml");
XElement newitem = new XElement(ns +"Item", new Object[] {"New York",
new XElement(ns + "tag", new Object[] {new XAttribute("out", "Neww Yarke")})});
XElement parentNode = xmlDoc.Descendants(ns + "one-of").First();
parentNode.Add(newitem);
xmlDoc.Save("xmlfile.xml");
如果您在XmlDocument或XDocument之间犹豫不决:topic