首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WordML内联更新属性

WordML内联更新属性
EN

Stack Overflow用户
提问于 2012-01-25 17:54:20
回答 2查看 594关注 0票数 0

我试图用XML值更改word ml模式的属性值。

代码语言:javascript
复制
...
<wp:docPr id="3" name="Picture 3" descr="http://pathtoimage.png"/>
...

我想用这样的XML值来更改descr值.

代码语言:javascript
复制
...
<wp:docPr id="3" name="Picture 3" descr="<xsl:value-of select='Assessment/Scorecard/Graph0' />" />
...

但这不管用。它不喜欢内联的xsl值。我也试过这个..。

代码语言:javascript
复制
...
<wp:docPr id="3" name="Picture 3" descr="{Assessment/Scorecard/Graph0}" />
...

这不会导致任何错误,但也不起作用。

是否有任何其他方法来修改与XML值内联的值?

更详细的更新..。

XML

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<Assessment>
<Title>
    <CompanyName>Company Name</CompanyName>
    <ReportDate>January 25th, 2012</ReportDate>
    <Address>
        <Line>Line 1</Line>
    </Address>
    <Address>
        <Line>Line 2</Line>
    </Address>
    <Address>
        <Line>Line 3</Line>
    </Address>
    <Address>
        <Line>Line 4</Line>
    </Address>
</Title>

<Scorecard>
    <SuppliesAndServiceLogistics>5.2</SuppliesAndServiceLogistics>
    <PrintingHardwareUsage>5.3</PrintingHardwareUsage>
    <TechnologyReliabilityAndUserProductivity>4.2</TechnologyReliabilityAndUserProductivity>
    <EnvironmentalImpact>3.0</EnvironmentalImpact>
    <Expense>1.8</Expense>
    <Graph0>http://path_to_image/Graph0.png</Graph0>
    <Savings>$43,526</Savings>
</Scorecard>
...
</Assessment>

XSLT

代码语言:javascript
复制
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">

<w:document
  xmlns:ve="http://schemas.openxmlformats.org/markup-compatibility/2006" 
  xmlns:o="urn:schemas-microsoft-com:office:office" 
  xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" 
  xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" 
  xmlns:v="urn:schemas-microsoft-com:vml" 
  xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" 
  xmlns:w10="urn:schemas-microsoft-com:office:word" 
  xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" 
  xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml">

  <w:body>
  ...

    <w:p w:rsidR="0057097D" w:rsidRDefault="0057097D">
      <w:pPr>
        <w:jc w:val="center"/>
        <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:noProof/>
        </w:rPr>
        <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:r>
    </w:p>

  ...

  </w:body>

</w:document>

代码语言:javascript
复制
...
$xmlDataFile = ("Assessment.xml");
$xsltFile = ("Assessment.xslt");
$sourceTemplate = ("AssessmentTemplate.docx");
$outputDocument = ("Assessment.docx");

//Load the xml data and xslt and perform the transformation.
$xmlDocument = new DOMDocument();
$xmlDocument->load($xmlDataFile);

$xsltDocument = new DOMDocument();
$xsltDocument->load($xsltFile);

$xsltProcessor = new XSLTProcessor();
$xsltProcessor->importStylesheet($xsltDocument);

//After the transformation, $newContentNew contains 
//the XML data in the Open XML Wordprocessing format.
$newContent =  $xsltProcessor->transformToXML($xmlDocument);

//Copy the Word 2007 template document to the output file.
if (copy($sourceTemplate, $outputDocument)) {
    //Open XML files are packaged following the Open Packaging 
    //Conventions and can be treated as zip files when 
    //accessing their content.
    $zipArchive = new ZipArchive();
    $zipArchive->open($outputDocument);

    //Replace the content with the new content created above.
    //In the Open XML Wordprocessing format content is stored
    //in the document.xml file located in the word directory.
    $zipArchive->addFromString("word/document.xml", $newContent);
    $zipArchive->close();
}

无论出于什么原因,它都不会更改生成的文档中的图像。它使用Word文档模板中的现有图像。

谢谢约翰

EN

回答 2

Stack Overflow用户

发布于 2012-01-25 22:46:28

我尝试了转换,结果是很好的(即从Assessment.xml中提取了descr属性的值)。您确定addFromString方法是成功的吗?它返回一个bool值来指示结果。它是否可能失败,因为存档中已经存在word/document.xml,并且不能覆盖它(也就是说,您需要首先删除它)?

票数 1
EN

Stack Overflow用户

发布于 2012-01-27 14:25:15

好的,很明显,我上面的代码运行良好。问题在于Word 2007缓存映像。我能够更新word/media文件夹中的文件,以便正确的图像在其中,但是当查看word文档本身时,缓存的图像仍在显示中。

如果您有同样的问题,我已经创建了一个后续问题here

谢谢你的帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9007605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档