我是XML / XSLT的新手,在修改Word XSLT模板时尝试更改图像时出现问题。
我有4个部分......
除了涉及到图像外,这一切似乎都很有效。基本上,我似乎无法使用XML值来加载图像。
Word文档 只是一个Word 2007文档,模仿最终输出应该是什么。包含占位符图,我试图在XSLT中动态替换,但无论如何,Word文档模板中的图像似乎总是显示出来。
XML:
<Assessment>
<Title>
...
</Title>
<Scorecard>
...
<Graph0>http://pathtoimage.jpg</Graph0>
...
</Scorecard>
</Assessment>
评估/记分卡/图表0是我要插入的图像的路径。
XSLT:
...
<w:drawing>
<wp:inline distT="0" distB="0" distL="0" distR="0">
<wp:extent cx="5709285" cy="1524000"/>
<wp:effectExtent l="19050" t="0" r="5715" b="0"/>
<wp:docPr id="3" name="Picture 3" descr="{Assessment/Scorecard/Graph0}"/>
<wp:cNvGraphicFramePr>
<a:graphicFrameLocks xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" noChangeAspect="1"/>
</wp:cNvGraphicFramePr>
<a:graphic xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">
<a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/picture">
<pic:pic xmlns:pic="http://schemas.openxmlformats.org/drawingml/2006/picture">
<pic:nvPicPr>
<pic:cNvPr id="0" name="Picture 3" descr="{Assessment/Scorecard/Graph0}"/>
<pic:cNvPicPr>
<a:picLocks noChangeAspect="1" noChangeArrowheads="1"/>
</pic:cNvPicPr>
</pic:nvPicPr>
<pic:blipFill>
<a:blip r:embed="rId9" r:link="rId10" cstate="print"/>
<a:srcRect/>
<a:stretch>
<a:fillRect/>
</a:stretch>
</pic:blipFill>
<pic:spPr bwMode="auto">
<a:xfrm>
<a:off x="0" y="0"/>
<a:ext cx="5709285" cy="1524000"/>
</a:xfrm>
<a:prstGeom prst="rect">
<a:avLst/>
</a:prstGeom>
<a:noFill/>
<a:ln w="9525">
<a:noFill/>
<a:miter lim="800000"/>
<a:headEnd/>
<a:tailEnd/>
</a:ln>
</pic:spPr>
</pic:pic>
</a:graphicData>
</a:graphic>
</wp:inline>
</w:drawing>
...
<w:tc>
<w:tcPr>
<w:tcW w:w="0" w:type="auto"/>
<w:tcMar>
<w:top w:w="75" w:type="dxa"/>
<w:left w:w="300" w:type="dxa"/>
<w:bottom w:w="75" w:type="dxa"/>
<w:right w:w="75" w:type="dxa"/>
</w:tcMar>
<w:vAlign w:val="center"/>
<w:hideMark/>
</w:tcPr>
<w:p w:rsidR="0057097D" w:rsidRDefault="0057097D">
<w:pPr>
<w:pStyle w:val="Heading3"/>
<w:rPr>
<w:rFonts w:ascii="Arial" w:eastAsia="Times New Roman" w:hAnsi="Arial" w:cs="Arial"/>
</w:rPr>
</w:pPr>
<w:r>
<w:rPr>
<w:rFonts w:ascii="Arial" w:eastAsia="Times New Roman" w:hAnsi="Arial" w:cs="Arial"/>
</w:rPr>
<w:t xml:space="preserve">Prepared for: <xsl:value-of select="Assessment/Title/CompanyName" /></w:t>
</w:r>
</w:p>
<w:p w:rsidR="0057097D" w:rsidRDefault="0057097D">
<w:pPr>
<w:pStyle w:val="Heading3"/>
<w:rPr>
<w:rFonts w:ascii="Arial" w:eastAsia="Times New Roman" w:hAnsi="Arial" w:cs="Arial"/>
</w:rPr>
</w:pPr>
<w:r>
<w:rPr>
<w:rFonts w:ascii="Arial" w:eastAsia="Times New Roman" w:hAnsi="Arial" w:cs="Arial"/>
</w:rPr>
<w:t><xsl:value-of select="Assessment/Title/ReportDate" /></w:t>
</w:r>
</w:p>
<xsl:for-each select="Assessment/Title/Address">
<w:p w:rsidR="0057097D" w:rsidRDefault="0057097D">
<w:pPr>
<w:pStyle w:val="NormalWeb"/>
<w:rPr>
<w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
</w:rPr>
</w:pPr>
<w:r>
<w:rPr>
<w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
</w:rPr>
<w:t><xsl:value-of select="Line" /></w:t>
</w:r>
</w:p>
</xsl:for-each>
</w:tc>
其中{Assessment / Scorecard / Graph0}是新图像的占位符。
PHP
$xmlDataFile = ("Assessment.xml");
$xsltFile = ("Assessment.xslt");
$sourceTemplate = ("AssessmentTemplate.docx");
$outputDocument = ("Assessment.docx");
$xmlDocument = new DOMDocument();
$xmlDocument->load($xmlDataFile);
$xsltDocument = new DOMDocument();
$xsltDocument->load($xsltFile);
$xsltProcessor = new XSLTProcessor();
$xsltProcessor->importStylesheet($xsltDocument);
$newContent = $xsltProcessor->transformToXML($xmlDocument);
if (copy($sourceTemplate, $outputDocument)) {
$zipArchive = new ZipArchive();
$zipArchive->open($outputDocument);
$zipArchive->addFromString("word/document.xml", $newContent);
$zipArchive->close();
}
这将所有内容放在一起并生成我的最终Word文档。正如我所说,除了图像之外,一切都很好。所有文本值都更新为XML文件中的值,但我似乎无法更新图像。
对于我正在使用的值:
<xsl:value-of select="..." />
对于不起作用的值(图像),我正在使用:
{Assessment/Scorecard/Graph0}
我认为这与插入XML内容的方法有关,但它也不会接受用于大括号方法的方法的值 - 并且实际上会破坏文档。
有什么建议吗?有更好的方法吗?
提前致谢!
答案 0 :(得分:0)
两个建议。 您可以在使用之前添加注释以调试Assessment / Scorecard / Graph0的值
<xsl:comment><xsl:value-of select="Assessment/Scorecard/Graph0"/></xsl:comment>
Second, you could change
<wp:docPr id="3" name="Picture 3" descr="{Assessment/Scorecard/Graph0}"/>
到
<wp:docPr id="3" name="Picture 3">
<xsl:attribute name="descr">
<xsl:value-of select="Assessment/Scorecard/Graph0"/>
</xsl:attribute>
</wp:docPr>