1

私は現在、翻訳用のデータを含む単純な XML シートのデータを取得しようとしています。この構造は次のようになっています。

<string name="action_settings">Settings</string><!-- Comment1 -->
<string name="action_error">Something went wrong.</string>
<string name="action_menu">You've got the choice</string><!-- Comment2 -->

翻訳者のために内容をもう少し説明するコメントが後にある場合があります。それらを取得したいのですが、コメントを書くことはできましたが、信頼できるコメントを1つ取得できませんでした...

私の考えは次のとおりです。たとえば、「action_setting」のコメントを取得したい場合は、xpath を使用してこの領域を選択します。

<string name="action_settings">Settings</string>|AREASTART|<!-- Comment1 -->
|AREAEND|<string name="action_error">Something went wrong.</string>
<string name="action_menu">You've got the choice</string><!-- Comment2 -->

私はすでにこのコードでこれをアーカイブしようとしました:

<?php
    $doc = new DOMDocument();
    $doc->load('strings.xml');

    $xpath = new DOMXPath($doc);

    //foreach ($xpath->query("//string[@name='debug']/following::comment()[1]") as $comment)
    foreach ($xpath->query("/*/string[count(preceding-sibling::string[@name='debug'])=1]/comment()[1]") as $comment)
    {
        var_dump($comment->textContent." ");
    }
?>

ご覧のとおり、コメント行は、特定の要素の後のすべてのコメント ノードを選択し、行の最初のノードを選択するだけです。これに関する問題は、コメントが実際に特定の要素の後にあるのか、それとも数行後の要素のコメントなのかを確認できないことです(したがって、「action_error」を取得したい場合は、「 「action_menu」に属する「コメント 2」)

ご覧のとおり、この目的の領域を選択しようとしましたが、コメントがある場合は何も返されません (私のソース: XPath select all elements between two specific elements )

したがって、2 つの特定の要素の間のコメントで直面しているこの問題の解決策を説明していただければ幸いです。

4

1 に答える 1