如何编写正则表达式来获取XML标记内的文本?

时间:2013-07-21 21:46:33

标签: regex

我正在尝试编写一个正则表达式,它将返回一些XML标记内的文本。例如,如果我有一个这种格式的文件

<name>Joe Blog</name>
<email>abc@sample.com</email>
<address>123 sample st</address>

如何提取地址字段的文本?

任何有关此的帮助将不胜感激。 感谢,

2 个答案:

答案 0 :(得分:2)

此表达式将捕获地址值

<address>(.*?)<\/address>

enter image description here

并将其放入第一个捕获组

实施例

示例文字

<name>Joe Blog</name>
<email>abc@sample.com</email>
<address>123 sample st</address>

<强>匹配

[0][0] = <address>123 sample st</address>
[0][1] = 123 sample st

然而

大多数语言都有一个html解析工具,例如你可以使用以下方法在PHP中执行此操作:

$dom = new DOMDocument();
$dom->loadHTML($your_html_here);
$addresses= $dom->getElementsByTagName('address');
foreach($addresses as $address) {
    $address = $address->innertext;
    // do something
}

答案 1 :(得分:0)

你必须自己编写或者你可以使用tinyxml2吗?

如果在没有SAX解析器的情况下使用tinyxml2并且您知道该文档,请尝试类似:

/* ------ Example 2: Lookup information. ---- */    
{
    XMLDocument doc;
    doc.LoadFile( "dream.xml" );

    // Structure of the XML file:
    // - Element "PLAY"      the root Element, which is the 
    //                       FirstChildElement of the Document
    // - - Element "TITLE"   child of the root PLAY Element
    // - - - Text            child of the TITLE Element

    // Navigate to the title, using the convenience function,
    // with a dangerous lack of error checking.
    const char* title = doc.FirstChildElement( "PLAY" )->FirstChildElement( "TITLE" )->GetText();
    printf( "Name of play (1): %s\n", title );

    // Text is just another Node to TinyXML-2. The more
    // general way to get to the XMLText:
    XMLText* textNode = doc.FirstChildElement( "PLAY" )->FirstChildElement( "TITLE" )->FirstChild()->ToText();
    title = textNode->Value();
    printf( "Name of play (2): %s\n", title );
}

如果您想使用SAX解析器,tinyxml2也支持该模式。例如代码,转到cocos2d-x并查看CCSAXParser类,该类调用和子类tinyxml2来解析几乎所有XML文件。

来源:tinyXML2         cocos2d-x