将字符串值分配给 InnerText XML 属性值
Posted
技术标签:
【中文标题】将字符串值分配给 InnerText XML 属性值【英文标题】:Assign string value to InnerText XML attribute value 【发布时间】:2021-04-23 00:18:24 【问题描述】:我正在尝试将字符串中的第一个单词提取到firstName
元素中。所有剩余的单词都应该放在lastName
元素中。
示例
ClientName = Stev Finance Company
这里Stev
是firstName
,Finance Company
是lastName
。
这是我的代码,其中doc
是一个 XML 文档:
// XML construction – no issue here
XmlDocument Mainroot = new XmlDocument();
XmlElement root = Mainroot.CreateElement("Parent");
XmlElement firstName = Mainroot.CreateElement("FirstName");
XmlElement lastName = Mainroot.CreateElement("LastName");
var clientname = XmlHelper.getString(doc, "//BusinessClient/ClientName");
var firstName = clientname.Split(' ');
var lastName = clientname.Split(' ', (char)StringSplitOptions.RemoveEmptyEntries);
firstName.InnerText = firstName; // Getting an error: "Cannot Convert string[] to string"
lastName.InnerText = lastName; // Getting an error: "Cannot Convert string[] to string"
请告诉我为什么会出错。
【问题讨论】:
【参考方案1】:其他答案都是正确的;你有两个问题:
-
您将
firstName
标识符重用于 XmlElement
和从 string.Split()
方法返回的字符串数组。
您正在尝试将字符串数组分配给XmlElement.innerText
属性,但它需要一个字符串。
要解决这些问题,请重命名或内联变量之一,并将您分配给string
的值的类型更改为string[]
而不是string[]
。您可以通过使用string.Join()
将字符串数组中的值连接回字符串来实现此目的。在下面的示例中,值用空格连接,第一个单词被跳过(因为它被用作名字)。
// XML construction – no issue here
XmlDocument Mainroot = new XmlDocument();
XmlElement root = Mainroot.CreateElement("Parent");
XmlElement firstName = Mainroot.CreateElement("FirstName");
XmlElement lastName = Mainroot.CreateElement("LastName");
var clientname = XmlHelper.getString(doc, "//BusinessClient/ClientName");
// Set the value of this element to the first word in the client name.
firstName.innerText = clientname.Split(' ').FirstOrDefault();
// Set the value of this element to the rest of the word(s) in the client name.
lastName.innerText = string.Join(" ", clientname.Split(' ', (char)StringSplitOptions.RemoveEmptyEntries).Skip(1));
【讨论】:
感谢您的回复,这里又是 FirstOrDefault();并且未找到 Skip(1) - 这是我遇到的错误FirstOrDefault()
和 Skip()
在 Linq 库中可用。通过在文件顶部包含 using System.Linq;
将它们添加到您的项目中。【参考方案2】:
因为,'Split' 方法返回字符串数组。如果你只想得到一个字符串,试试这个: var firstName = clientname.Split(' ').FirstOrDefault(); var lastName = clientname.Split(' ', (char)StringSplitOptions.RemoveEmptyEntries).FirstOrDefault();
https://docs.microsoft.com/en-us/dotnet/api/system.linq.enumerable.firstordefault?view=net-5.0
【讨论】:
感谢您的回复,“clientname.Split(' ')”中不存在 FirstOrDefault() 属性。 ,请告诉我该怎么做 添加“使用 System.Linq” docs.microsoft.com/en-us/dotnet/csharp/language-reference/… 非常感谢您的热情回复【参考方案3】:当您用显式类型替换 var
时,您可以看到 firstName
是 string
... 并且 String 没有 innerText
属性,但提供的代码看起来不完整,因为您应该得到如果该块由于双重实例化而全部在一个方法中,则会出错。
【讨论】:
请告诉我如何实现这一点,我需要从 ClientName 中提取 FirstName 和 last,然后我需要重新插入新的 XML 标签 那么你应该阅读 XmlDocument 的文档:docs.microsoft.com/de-de/dotnet/api/… where are here for HELP,不做你的工作;)以上是关于将字符串值分配给 InnerText XML 属性值的主要内容,如果未能解决你的问题,请参考以下文章
将 strings.xml 资源值分配给 MainActivity 中的字符串失败
[ jquery 方法 text([val|fn]) ] 此方法操作匹配的元素或元素集中的内容,相当于javascript中的innerText属性