簡體   English   中英

使用DomDocument將實體添加到DOCTYPE

[英]Adding entities to the DOCTYPE using DomDocument

我正在嘗試創建一個看起來像這樣的XML文檔...

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE stylesheet  [
    <!ENTITY nbsp   "&#160;">
    <!ENTITY copy   "&#169;">
    <!ENTITY reg    "&#174;">
    <!ENTITY trade  "&#8482;">
    <!ENTITY mdash  "&#8212;">
    <!ENTITY ldquo  "&#8220;">
    <!ENTITY rdquo  "&#8221;"> 
    <!ENTITY pound  "&#163;">
    <!ENTITY yen    "&#165;">
    <!ENTITY euro   "&#8364;">
]>
<NewsPost>
    <Post>
        <PermaLink>http://news.bradfordastronomy.co.uk/?p=92</PermaLink>
        <Title>Change of Venue for Monday Meetings until March 2015</Title>
        <Content>Due to building work at Eccleshill library, the Monday meetings will be held at     Upper Bolton Conservative Club, Idle Road, Bradford, BD2 4JN.&#13;
&#13;
&nbsp;&#13;
&#13;
&nbsp;&#13;
&#13;
&lt;span style="color: #ffff00"&gt;&lt;strong&gt;Update &lt;/strong&gt;&lt;/span&gt;&#13;
&#13;
The building work is taking longer than expected; however, we hope to be back at the Library by     the end of March 2015.</Content></Post></NewsPost>

我正在嘗試使用PHP進行此操作。 到目前為止,我目前的代碼是...

    $imp = new DOMImplementation;

    $dtd = $imp->createDocumentType('stylesheet', '', '');

    $domDoc = new DOMDocument('1.0', 'utf-8');
    $domDoc->preserveWhiteSpace = false;

    require_once(newsFolder.'/wp-blog-header.php'); 
    //global $post;
    $args = array( 'posts_per_page' => 1 );
    $myposts = get_posts( $args );


    $rootElement = $domDoc->createElement('NewsPost');
    $domDoc->appendChild($rootElement); 

    foreach( $myposts as $post ) : setup_postdata($post);
        $postNode = $domDoc->createElement("Post");
        $rootElement->appendChild($postNode);

        $permaLinkNode = $domDoc->createElement("PermaLink",get_permalink());
        $postNode->appendChild($permaLinkNode);

        $titleNode = $domDoc->createElement("Title",get_the_title());
        $postNode->appendChild($titleNode);

        //$contentNode = $domDoc->createElement("Excerpt",get_the_excerpt());
        //$postNode->appendChild($contentNode);

        $contentNode = $domDoc->createElement("Content",get_the_content());
        $postNode->appendChild($contentNode);
    endforeach;

    $domDoc->save(cacheFolder.'LatestWordPressEntry.xml');

    unset($domDoc);

您會注意到沒有代碼可將標簽添加到!DOCTYPE

我在網上四處尋找,看不到這樣做的最佳實踐方法。 我真的不想訴諸將XML保存到字符串,然后執行字符串替換(這總是很麻煩的)

任何幫助,將不勝感激。

基本上,我正在尋求將

<!DOCTYPE stylesheet>

標記為

<!DOCTYPE stylesheet  [
    <!ENTITY nbsp   "&#160;">
    <!ENTITY copy   "&#169;">
    <!ENTITY reg    "&#174;">
    <!ENTITY trade  "&#8482;">
    <!ENTITY mdash  "&#8212;">
    <!ENTITY ldquo  "&#8220;">
    <!ENTITY rdquo  "&#8221;"> 
    <!ENTITY pound  "&#163;">
    <!ENTITY yen    "&#165;">
    <!ENTITY euro   "&#8364;">
]>

DOM不是用於構建文檔類型定義的接口,這就是為什么您找不到用於將諸如實體聲明之類的內容添加到內部子集的方法的原因。 如果必須內聯而不是使用外部子集,則必須將其作為完整字符串提供並相應地加載。


例:

$xml = <<<'XML'
<!DOCTYPE stylesheet  [
    <!ENTITY nbsp   "&#160;">
    <!ENTITY copy   "&#169;">
    <!ENTITY reg    "&#174;">
    <!ENTITY trade  "&#8482;">
    <!ENTITY mdash  "&#8212;">
    <!ENTITY ldquo  "&#8220;">
    <!ENTITY rdquo  "&#8221;">
    <!ENTITY pound  "&#163;">
    <!ENTITY yen    "&#165;">
    <!ENTITY euro   "&#8364;">
]>
<NewsPost/>
XML;

$dom = new DOMDocument();
$dom->loadXML($xml);

echo $dom->saveXML();

輸出:

<?xml version="1.0"?>
<!DOCTYPE stylesheet [
<!ENTITY nbsp "&#160;">
<!ENTITY copy "&#169;">
<!ENTITY reg "&#174;">
<!ENTITY trade "&#8482;">
<!ENTITY mdash "&#8212;">
<!ENTITY ldquo "&#8220;">
<!ENTITY rdquo "&#8221;">
<!ENTITY pound "&#163;">
<!ENTITY yen "&#165;">
<!ENTITY euro "&#8364;">
]>
<NewsPost/>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM