如何将对象转换为节点

时间:2016-05-03 09:54:01

标签: javascript xml xpath marklogic marklogic-8

我想将一些文档属性(以xml格式)作为节点使用,以便我可以使用子元素。到目前为止,我有:

var counts = [];
for (var p of xdmp.documentProperties(uris)) {
    var isANode = p instanceof Node; // false (actually true - see edit)

    var count = xdmp.xqueryEval('fn:count(' + p + '//data)')
    counts.push(count)
}
counts

我在MarkLogic文档中看过nodebuilder个示例,我想使用该界面。例如

myNode.xpath('//data')
var children = myNode.childNodes()

有没有一种方法可以将对象转换为节点,而不是使用XPath进行评估?或者,有没有更好的方法来使用Server Side JavaScript中的现有XML?

在XQuery中,我可以使用xdmp:tranform-to-json(),但SJS中没有提供该功能。

编辑:

在我尝试提供干净的代码示例时,我遗漏了重要信息。我的代码结构如下:

for (var uri of cts.uriMatch('/pattern/*')) {
    var p = xdmp.documentProperties(uri);
    var isANode = p instanceof Node; // false
    // ...
}

而不是

for (var p of xdmp.documentProperties(cts.uriMatch('/pattern/*'))) {
    var isANode = p instanceof Node; // true
    // ...
}

返回的类型是ValueIterator,相当于XQuery序列,可以使用以下方法访问:

xdmp.documentProperties(uri).next().value

1 个答案:

答案 0 :(得分:7)

这在QConsole中对我有用:

using (SqlConnection sqlCon = new SqlConnection(sqlCnt))
{
    for (int i = 1; i < metroGrid2.Rows.Count; i++)
    {
        SqlCommand cmd = new SqlCommand("INSERT INTO Yeucaukhachang(id,MaKhachHang,MaHang,TenHang,DonViTinh,Dongia,SoLuong,Duyet) 
                values(@id,@MaKhachHang,@MaHang,@TenHang,@DonViTinh,@Dongia,@SoLuong,@Duyet)", sqlCon);
        cmd.Parameters.AddWithValue("@id", metroGrid2.Rows[i].Cells[1].Value);
        cmd.Parameters.AddWithValue("@MaKhachHang", makh.Text);
        cmd.Parameters.AddWithValue("@MaHang", metroGrid2.Rows[i].Cells[2].Value);
        cmd.Parameters.AddWithValue("@TenHang", metroGrid2.Rows[i].Cells[3].Value);
        cmd.Parameters.AddWithValue("@SoLuong", metroGrid2.Rows[i].Cells[4].Value);
        cmd.Parameters.AddWithValue("@DonViTinh", metroGrid2.Rows[i].Cells[5].Value);
        cmd.Parameters.AddWithValue("@Dongia", metroGrid2.Rows[i].Cells[6].Value);
        cmd.Parameters.AddWithValue("@Duyet", 'N');
        sqlCon.Open();
        cmd.ExecuteNonQuery();
        sqlCon.Close();
        MessageBox.Show("Thêm thành công, chuyển qua xác nhận yêu cầu");
   }              
}

在我的测试中,每个p都是一个节点。我用xquery脚本创建了一些示例数据。

'