0

変換してブラウザで表示し、ディレクトリに保存するxmlドキュメントがあります。

保存したバージョンのファイルにリンクしたスタイルシートを追加したいのですが。私は以下のようにstr_replaceを試しました(間違った使用法かもしれません)そしてまたxsl処理命令を使用しました。

xsl処理命令はある程度機能しました。ブラウザでソースを表示すると、スタイルシートのリンクが表示されますが、この情報は保存されたファイルに保存されません。

私がやりたいのは、生のxmlファイルを取得し、スタイルシートで変換し、ディレクトリに保存して、新しいファイルのヘッダーにxslスタイルシートを追加することです。したがって、新しく保存されたxmlファイルをブラウザーで開くと、スタイルシートは自動的に適用されます。これが理にかなっていることを願っています!!

私のコードは以下の通りです。

//write to the file
$id = $_POST['id'];//xml id
$path = 'xml/';//send to xml directory
$filename = $path. $id . ".xml";
$header = str_replace('<?xml version="1.0" encoding="UTF-8"?>', '<?xml version="1.0"     encoding="UTF-8" ?><?xml-stylesheet type="text/xsl" href="../foo.xsl"?>');
$article->asXML($filename);//saving the original xml as new file with posted id

$xml = new DOMDocument;
$xml->load($filename);

$xsl = new DOMDocument;
$xsl->load('insert.xsl');

$proc = new XSLTProcessor;
$proc->importStyleSheet($xsl);

echo $proc->transformToXML($xml);

前もって感謝します!

4

1 に答える 1

1

<xsl:processing-instruction/>XSLTファイルのタグを使用して、スタイルシートのリンクを追加できます。

<xsl:processing-instruction name="xml-stylesheet">
    type="text/xsl" href="../foo.xsl"
</xsl:processing-instruction>

これにより、次のようになります。

<?xml-stylesheet type="text/xsl" href="../foo.xsl"?>

または、を使用してそれを行うこともできますDOMDocument

$newXml = $proc->transformToXML($xml);

// Re-create the DOMDocument with the new XML
$xml = new DOMDocument;
$xml->loadXML($newXml);

// Find insertion-point
$insertBefore = $xml->firstChild;
foreach($xml->childNodes as $node)
{
  if ($node->nodeType == XML_ELEMENT_NODE)
  {
    $inertBefore = $node;
    break;
  }
}

// Create and insert the processing instruction
$pi = $xml->createProcessingInstruction('xml-stylesheet', 'type="text/xsl" href="../foo.xsl"');
$xml->insertBefore($pi, $insertBefore);

echo $xml->saveXML();
于 2012-07-08T12:34:23.157 に答える