linq 如何在字符串中使用XML标记?

nc1teljy  于 2022-12-06  发布在  其他
关注(0)|答案(6)|浏览(148)

我正在使用Microsoft Visual C# 2008学习版。
假设我有一个字符串,字符串的内容是:"This is my <myTag myTagAttrib="colorize">awesome</myTag> string."
我告诉自己,我想对“awesome”这个词做点什么--可能调用一个函数来做一些叫做“colorize”的事情。
在C#中,检测该标记是否存在并获取该属性的最佳方法是什么?我在C#中使用过一些XElement之类的东西,但主要是阅读XML文件。
谢谢你!

  • 阿迪娜
vnjpjtjt

vnjpjtjt1#

另一种解决方案:

var myString = "This is my <myTag myTagAttrib='colorize'>awesome</myTag> string.";
try
{
    var document = XDocument.Parse("<root>" + myString + "</root>");
    var matches = ((System.Collections.IEnumerable)document.XPathEvaluate("myTag|myTag2")).Cast<XElement>();
    foreach (var element in matches)
    {
        switch (element.Name.ToString())
        {
            case "myTag":
                //do something with myTag like lookup attribute values and call other methods
                break;
            case "myTag2":
                //do something else with myTag2
                break;
        }
    }
}
catch (Exception e)
{
    //string was not not well formed xml
}

我还考虑了您对Dabblernl的评论,其中您希望解析多个元素上的多个属性。

klh5stk1

klh5stk12#

您可以使用正则表达式提取XML,将提取的xml字符串加载到XElement中,然后从那里开始:

string text=@"This is my<myTag myTagAttrib='colorize'>awesome</myTag> text.";
Match match=Regex.Match(text,@"(<MyTag.*</MyTag>)");
string xml=match.Captures[0].Value;
XElement element=XElement.Parse(xml);
XAttribute attribute=element.Attribute("myTagAttrib");
if(attribute.Value=="colorize") DoSomethingWith(element.Value);// Value=awesome

如果找不到MyTag元素,则此代码将引发异常,但可以通过插入以下行进行补救:

if(match.Captures.Count!=0)
{...}

如果字符串可以容纳不止MyTag Tag的内容,那就更有趣了......

sz81bmfz

sz81bmfz3#

我对你的例子有点困惑,因为你在字符串(文本内容)、标记和属性之间切换,但我认为你需要的是XPath。
因此,如果您的XML流如下所示:
这是另一个很棒的字符串
您可以使用如下所示的XPath表达式来查找属性:
//子级/@x
和一个类似于下面的函数来查找子标记下的文本值:
//子项
我是一个Java开发人员,所以我不知道您会使用什么XML库来完成这一工作,但是您需要一个DOM解析器来创建一个W3C Document类示例,方法是阅读XML文件,然后使用XPath提取值。
如果你需要的话,有一个很好的XPath tutorial from the W3C schools
最新消息:
如果你说你已经有了一个String形式的XML流,那么答案是不是从文件中读取它,而是从String本身读取。Java有一个叫做InputStream和Reader的抽象,分别处理字节流和字符流。源可以是一个文件、一个字符串,检查您的C#DOMAPI,看看它是否有类似的东西。您将把字符串传递给解析器,解析器将给予一个您可以操作的DOM对象。

cigdeys3

cigdeys34#

由于输入不是格式良好的XML,您将无法使用任何内置的XML库解析它。您需要一个正则表达式来提取格式良好的部分。您可能会使用一个更宽容的HTML解析器,如CodePlex上的HtmlAgilityPack

hlswsv35

hlswsv355#

这是我使用Regex匹配任何类型xml的解决方案:C#检测XML的更好方法?

7cwmlq89

7cwmlq896#

XmlTextReader可以用一个特殊的构造函数来解析XML片段,这在这种情况下 * 可能 * 会有所帮助,但我对此并不肯定。
这里有一篇深入的文章:
http://geekswithblogs.net/kobush/archive/2006/04/20/75717.aspx

相关问题