变换器是否可以忽略XML标记错误?

时间:2018-06-07 07:02:40

标签: xml xslt

我想使用XSLT转换如下所示的XML文件:

$item1 = $_POST['title'];
$item2 = $_POST['link'];
$item3 = $_POST['available_shares'];
$item4 = $_POST['risk'];
$item5 = $_POST['description'];
$item6 = $_POST['postID'];
$item7 = $_POST['price'];
$item8 = $_POST['timestamp'];

// Create connection
$mysqli=mysqli_connect("localhost","username","password","database"); 

// Check connection
if (mysqli_connect_errno()){
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$query = "INSERT INTO `TB_POSTS` 

(
  postID, 
  timestamp, 
  link, 
  price, 
  title, 
  available_shares, 
  risk, 
  description 

) VALUES(?, ?, ?, ?, ?, ?, ?, ?)";

$stmt = $mysqli->prepare($query);  //Prepare
$stmt->bind_param("ssssssss", $item6, $item8, $item2, $item7, $item1, $item3, $item4, $item5);  //Bind
$stmt->execute();//Execute
if($stmt->affected_rows === 0) exit('Nothing was inserted.');  //Check to see if it worked
$stmt->close();

如果我开始转换,我将收到一条错误,即“this”没有结束标记。有没有可能绕过这个?

1 个答案:

答案 0 :(得分:1)

当你提到oXygen时,我认为你可以使用XSLT 2或3与Saxon 9.在这种情况下你可以试试David Carlisle的标签汤解析器https://github.com/davidcarlisle/web-xslt/blob/master/htmlparse/htmlparse.xsl是用纯XSLT 2编写的为您提供所需的解析结果。

我用两个例子中的最后一个做了一个例子

    <root>
        <paragraph>Is 3 < 4?</paragraph>
        <paragraph>XSLT is powerful <:</paragraph>
    </root>
<{3>}中的

,完整的样式表是

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:math="http://www.w3.org/2005/xpath-functions/math"
    xmlns:d="data:,dpc"
    exclude-result-prefixes="xs math d"
    version="3.0">


    <xsl:import href="https://github.com/davidcarlisle/web-xslt/raw/master/htmlparse/htmlparse.xsl"/>

    <xsl:param name="mal-formed-markup" as="xs:string"><![CDATA[
        <root>
            <paragraph>Is 3 < 4?</paragraph>
            <paragraph>XSLT is powerful <:</paragraph>
        </root>
    ]]></xsl:param>

    <xsl:template match="/">
        <xsl:copy-of select="d:htmlparse($mal-formed-markup, '', false())"/>
    </xsl:template>

</xsl:stylesheet>

并将其解析为

    <root>
        <paragraph>Is 3 &lt; 4?</paragraph>
        <paragraph>XSLT is powerful &lt;:</paragraph>
    </root>

因此,对于解析器可能根据需要修复标记的两个示例,在实际应用程序中,您当然可以像unparsed-text一样加载任何非XML文件,然后将返回的字符串反馈给{{1函数,而不是像我在这个例子中那样使用XSLT中包含的数据作为CDATA部分。

另一个选择是提供Saxon 9商业版的oXygen用户使用扩展函数https://xsltfiddle.liberty-development.net/eiZQaFc

但最好的建议是修复输入的生成以使用XML工具,以便输入从一开始就是XML。