Java 在文档文件中使用1而不是true是否有效?

Java 在文档文件中使用1而不是true是否有效?,java,apache-poi,Java,Apache Poi,我正试图解析一个由谷歌文档生成的docx文件。我正在研究一个名为run的XWPFRun元素。如果调用run.isBold(),它将返回false,即使元素是粗体的。如果我查看run.getCTR(),就会得到下面的xml。正如你所看到的那样 <w:b w:val="1"/> 而不是 <w:b w:val="true"/> 这会导致isBold()返回false(我猜)。如果我在LibreOffice中导入文件并再次导出,isBold()将返回true,那么

我正试图解析一个由谷歌文档生成的docx文件。我正在研究一个名为run的XWPFRun元素。如果调用run.isBold(),它将返回false,即使元素是粗体的。如果我查看run.getCTR(),就会得到下面的xml。正如你所看到的那样

<w:b w:val="1"/> 

而不是

<w:b w:val="true"/> 

这会导致isBold()返回false(我猜)。如果我在LibreOffice中导入文件并再次导出,isBold()将返回true,那么这是google文档导出或poi中的错误吗?还是我做错了什么

<xml-fragment w:rsidDel="00000000" w:rsidR="00000000" w:rsidRPr="00000000" xmlns:mc="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" xmlns:sl="http://schemas.openxmlformats.org/schemaLibrary/2006/main" xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:pic="http://schemas.openxmlformats.org/drawingml/2006/picture" xmlns:c="http://schemas.openxmlformats.org/drawingml/2006/chart" xmlns:lc="http://schemas.openxmlformats.org/drawingml/2006/lockedCanvas" xmlns:dgm="http://schemas.openxmlformats.org/drawingml/2006/diagram" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup">
  <w:rPr>
    <w:rFonts w:ascii="Verdana" w:cs="Verdana" w:eastAsia="Verdana" w:hAnsi="Verdana"/>
    <w:b w:val="1"/>
    <w:sz w:val="36"/>
    <w:szCs w:val="36"/>
    <w:rtl w:val="0"/>
  </w:rPr>
  <w:t xml:space="preserve">Kapitel 1: Digitale tømmermænd</w:t>
  <w:br w:type="textWrapping"/>
</xml-fragment>

卡皮特尔1号:数码时代

从POI ooxml lib/OpenOfficeXML-XMLSchemas.zip中的wml.xsd中,我可以得出结论:1 | true | on是所有可接受且等效的真值,0 | false | off是所有可接受且等效的假值。任何应用程序都应该能够将其选择的这6个值中的任何一个写入XML文件,并且任何应用程序都应该能够以100%的可理解性读取这6个值中的任何一个

您在POI中发现了一个bug。查看isBold(以及使用isctalic和其他任何使用isCTOnOff的代码)的大小写,代码忽略了您发现的“1”/“0”大小写。代码还应使用STOnOff.X_1

这是现在,并将在下一个POI版本(3.15 beta 1)中提供


大胆的
开/关值
开/关值
真的
假的
真的
假的
假的
真的

您可以在各自的模式(POI附带)或标准(ECMA 376/ISO 29500-谷歌是您的朋友)中查找可接受的值
<xsd:element name="b" type="CT_OnOff" minOccurs="0">
  <xsd:annotation>
    <xsd:documentation>Bold</xsd:documentation>
  </xsd:annotation>
</xsd:element>

<xsd:complexType name="CT_OnOff">
  <xsd:attribute name="val" type="ST_OnOff">
    <xsd:annotation>
      <xsd:documentation>On/Off Value</xsd:documentation>
    </xsd:annotation>
  </xsd:attribute>
</xsd:complexType>

<xsd:simpleType name="ST_OnOff">
  <xsd:annotation>
    <xsd:documentation>On/Off Value</xsd:documentation>
  </xsd:annotation>
  <xsd:restriction base="xsd:string">
    <xsd:enumeration value="true">
      <xsd:annotation>
        <xsd:documentation>True</xsd:documentation>
      </xsd:annotation>
    </xsd:enumeration>
    <xsd:enumeration value="false">
      <xsd:annotation>
        <xsd:documentation>False</xsd:documentation>
      </xsd:annotation>
    </xsd:enumeration>
    <xsd:enumeration value="on">
      <xsd:annotation>
        <xsd:documentation>True</xsd:documentation>
      </xsd:annotation>
    </xsd:enumeration>
    <xsd:enumeration value="off">
      <xsd:annotation>
        <xsd:documentation>False</xsd:documentation>
      </xsd:annotation>
    </xsd:enumeration>
    <xsd:enumeration value="0">
      <xsd:annotation>
        <xsd:documentation>False</xsd:documentation>
      </xsd:annotation>
    </xsd:enumeration>
    <xsd:enumeration value="1">
      <xsd:annotation>
        <xsd:documentation>True</xsd:documentation>
      </xsd:annotation>
    </xsd:enumeration>
  </xsd:restriction>
</xsd:simpleType>