質問

私は、このリソースリンクテキストを見てきましたが、私はまだMSXMLを使用して、有効なXHTMLドキュメントを生成悩みを持っていますパーサます。

私は入力に以下の文書を持ってます:

    <?xml version="1.0" encoding="UTF-8" ?> 
- <html xml:lang="it" xmlns="http://www.w3.org/1999/xhtml">
- <head xmlns="">
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
   <title>Bla bla bla</title> 
  <link rel="stylesheet" type="text/css" media="screen" href="css/bla.css" /> 
  </head>
- <body xmlns="" style="background-color:#DFDFDF;left-margin:0;margin-top:0">
    ....
    </body>
  </html>
私は命令を挿入しているので、

ここで厄介なのxmlns =「」生成される:

parserInstance.documentElement.setAttribute "xmlns", "http://www.w3.org/1999/xhtml"

変換前の入力文書を作成する場合。

XSLTは、HTML要素を捕捉するために、私が使用する変換をインポート

<xsl:stylesheet 
    version="1.0" 
    xmlns:xhtml="http://www.w3.org/1999/xhtml"
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    exclude-result-prefixes="xhtml xsl"
>
<xsl:import href="_lib.xsl"/>
<xsl:import href="_standard.xsl"/>

と_standard.xsl以内に、私はrerlevant変換を行うコードを持っています:

<xsl:template match="html">
<xsl:copy>
    <xsl:copy-of select="@*" />
    <xsl:apply-templates select="head" />       
    <xsl:apply-templates select="body" />       
</xsl:copy>

それでも私は、HTMLマークアップの必須のxmlnsを持っていない。

<html xml:lang="it">

と私はまだhtmlコードにintersparsed厄介なのxmlnsを持っています:

<h1 xmlns="http://www.w3.org/1999/xhtml">BLA BLA</h1>

どこが間違って取得しています!

、注意してください:私は変換のためにプル・モデルを使用しなければならない、私はアイデンティティを使用することはできません。

変換
役に立ちましたか?

解決

DOMモデルと(MSXMLが使用しています)要素または属性ノードの名前空間は、それが作成されたとき、あなたは後でそれを変更することはできません決定され、名前の属性を設定することで、名前空間を変更するにはあなたのような試み「のxmlns」を行いますノードの名前空間を変更しない。

あなたがいない名前空間の要素を入力文書を持っており、XHTML名前空間の要素を一つにそれを変換するためにXSLTを使用するかのように聞こえるようにします。その場合、あなたは、XSLを使用することはできません。あなたがいない名前空間の結果要素を得るその方法としてコピーします。代わりに、例えばを必要とします。

<xsl:template match="html">
  <html xmlns="http://www.w3.org/1999/xhtml">
    ...
  </html>
</xsl:template>

またはコースの名前空間は、すべての結果の要素のためにあなたはXSLに=「http://www.w3.org/1999/xhtml」のxmlnsを置くことができることを望むよう:スタイルシートやスタイルシートモジュールのスタイルシート要素(複数可)あなたは、XHTMLの要素を作成すること。

他のヒント

あなたは「HTML」要素上のxmlns =「http://www.w3.org/1999/xhtml」を入れた場合は、

それはその要素とそのすべての(修飾されていない)の子孫要素に適用されます。あなたもbody要素に名前空間宣言を配置する必要がありますいずれか、または、すでに示唆したように、あなたは、単に= "http://www.w3.org/1999/xhtmlをのxmlnsを置くように、「体」要素は完全に別のテンプレートであります「すべてのXSLについて:XHTMLの要素を作成することになっている、あなたのスタイルシートモジュールのスタイルシート要素

そしてまたやってたりすると、入力ノードのコピーを作成しますないことを。あなたの入力要素が無い名前空間にあるとして、あなたはそれらのいずれかをコピーする場合は、結果の要素はXHTML名前空間になりたいしながら、結果におけるコピーもなし名前空間になります。したがって、XSLをやって:コピーまたはXSL:コピー-のは、あなたが望むもののために動作しません、代わりに名前空間例えばを変更したテンプレートを通して、あなたの要素を実行する必要があります。

<xsl:template match=*">
  <xsl:element name="{local-name()}" namespace="http://www.w3.org/1999/xhtml">
    <xsl:apply-templates/>
  </xsl:element>
</xsl:template>

@Martin:私はサンプルを掲示しています。申し訳ありませんが、私のコメントの中で、一般的なされています。

入力文書(最小限)

    <?xml version="1.0" encoding="UTF-8"?>
<html xml:lang="it">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>Page title</title>
<link rel="stylesheet" type="text/css" media="screen" href="css/stile.css"/>
</head>
<body>
<div id="errorPanel" class="errorPanel"/>
<navigation>

<panel name="navbar">
<link>
<url>resource1.htm</url>
<label>resource1</label>
</link>
</panel>

<panel name="special">
<link>
<url>resource2.htm</url>
<label>resource2</label>
</link>
</panel>
</navigation>

<content/>

<script type="text/javascript" src="lib/jquery.js"/>
<script type="text/javascript" src="backend.js"/>

</body>
</html>

それからちょうどコンテンツのメインXSLます:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet 
    version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns="http://www.w3.org/1999/xhtml" 
    exclude-result-prefixes="xsl"
>
<xsl:import href="_lib.xsl"/>
<xsl:import href="_standard.xsl"/>
<xsl:output 
    method="xml" 
    omit-xml-declaration="no" 
    encoding="UTF-8" 
    doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
    doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
/>

<xsl:template match="content">
            <h1>CONTENT</h1>
            <p>
                Bla bla bla
            </p>    
</xsl:template>
</xsl:stylesheet>

次に_standard.xsl。注、命令ます:

<xsl:template match="html">

一時的に使用され、XSL-コピーを掲示最初のコードスニペットで使用した

    <xsl:stylesheet 
    version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
>

<xsl:template match="html">
    <html xmlns="http://www.w3.org/1999/xhtml">
        <xsl:copy-of select="@*" />
        <xsl:apply-templates select="head" />       
        <xsl:apply-templates select="body" />       
    </html>
</xsl:template> 

<xsl:template match="head">
        <xsl:copy-of select="." />
</xsl:template> 

<xsl:template match="body">
    <body>
    <table id='toppanel'>
        <tr>
            <td>Bla bla bla</td>
            <td>Bla bla bla</td>
            <td>Bla bla bla</td>
        </tr>
    </table>

    <table>
    <tr>
        <xsl:apply-templates select="navigation/panel[@name='navbar']" mode="td"/>
    </tr>
    </table>

    <table>
    <tr>
        <td>
                <p>Area</p>
                <xsl:apply-templates select="navigation/panel[@name='special']" />
        </td>

        <td>
            <xsl:apply-templates select="content" />
        </td>

    </tr>
    </table>
    </body>
</xsl:template> 

</xsl:stylesheet>

私はこのような出力のマークアップで見ています:

<body xmlns="">

希望は明らかである。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top